Як перенесення облікових записів та паролів між екземплярами SQL Server

Переклади статей Переклади статей
Номер статті: 918992 - Показ продуктів, яких стосується ця стаття.
Розгорнути все | Згорнути все

На цій сторінці

Введення

Ця стаття описує як передавати на логіни і паролі між екземплярів Microsoft SQL Server 2005, Microsoft SQL Server 2008 і Microsoft SQL Server 2012 на різних серверах.

Для отримання додаткової інформації про те, як передавати на логінів і паролів між екземплярами інші версії SQL Server, клацніть номер статті для перегляду статті в базі знань Microsoft Knowledge Base:
246133 Як перенесення облікових записів та паролів між екземплярами SQL Server

Додаткові відомості

У цій статті A і B-сервер є різні сервери. Крім того, як A і сервер B запущено SQL Server 2005.

Примітка. Ця інформація також застосовується для SQL Server 2008 а також до SQL Server 2012.

Після переміщення бази даних від екземпляра SQL Server на сервері A до екземпляра SQL Server на сервері B, користувачі можуть бути в змозі увійти до бази даних на сервер b. Крім того, користувачі можуть отримувати протокол IMAP про помилку:
увійти не вдалося для користувача "MyUser'. (Microsoft SQL Server, помилка: 18456)
Ця проблема виникає тому, що ви не передачі на логіни і паролі з екземпляра SQL Server на сервері A екземпляра SQL Server на сервері b.

Переносити на логіни, використовуйте один із нижченаведених способів відповідно до вашої ситуації.

Метод 1: увійти за допомогою попередньо SQL Server 2000 пароль

Щоб усунути цю помилку, попросіть користувача увійти на сервер, на якому запущено SQL Server, використовуючи пре SQL Server 2000 Логін.

Примітка. Хешування паролів оновлюються автоматично під Вільний час входу користувача за допомогою попередньо SQL Server 2000 пароль.

Метод 2: Скидання пароля в SQL Server

Щоб вирішити цю проблему, скидання пароля в SQL Server а потім скрипт на Логін.

Примітка. Пароль хеш-алгоритм використовується, коли ви скинути пароль.

Спосіб 3: Створити журнал в сценарій, який має порожнього пароля

Щоб створити журнал в сценарій, який має порожній пароль, виконайте такі дії:
  1. На сервері A запустити SQL Server управління студії а потім підключитися до екземпляра SQL Server, з якого ви переїхали бази даних.
  2. Відкриття нового вікна запит на змінення редактор а потім запустіть наступну сценарію.
    USE master
    GO
    IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL
      DROP PROCEDURE sp_hexadecimal
    GO
    CREATE PROCEDURE sp_hexadecimal
        @binvalue varbinary(256),
        @hexvalue varchar (514) OUTPUT
    AS
    DECLARE @charvalue varchar (514)
    DECLARE @i int
    DECLARE @length int
    DECLARE @hexstring char(16)
    SELECT @charvalue = '0x'
    SELECT @i = 1
    SELECT @length = DATALENGTH (@binvalue)
    SELECT @hexstring = '0123456789ABCDEF'
    WHILE (@i <= @length)
    BEGIN
      DECLARE @tempint int
      DECLARE @firstint int
      DECLARE @secondint int
      SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))
      SELECT @firstint = FLOOR(@tempint/16)
      SELECT @secondint = @tempint - (@firstint*16)
      SELECT @charvalue = @charvalue +
        SUBSTRING(@hexstring, @firstint+1, 1) +
        SUBSTRING(@hexstring, @secondint+1, 1)
      SELECT @i = @i + 1
    END
    
    SELECT @hexvalue = @charvalue
    GO
     
    IF OBJECT_ID ('sp_help_revlogin') IS NOT NULL
      DROP PROCEDURE sp_help_revlogin
    GO
    CREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL AS
    DECLARE @name sysname
    DECLARE @type varchar (1)
    DECLARE @hasaccess int
    DECLARE @denylogin int
    DECLARE @is_disabled int
    DECLARE @PWD_varbinary  varbinary (256)
    DECLARE @PWD_string  varchar (514)
    DECLARE @SID_varbinary varbinary (85)
    DECLARE @SID_string varchar (514)
    DECLARE @tmpstr  varchar (1024)
    DECLARE @is_policy_checked varchar (3)
    DECLARE @is_expiration_checked varchar (3)
    
    DECLARE @defaultdb sysname
     
    IF (@login_name IS NULL)
      DECLARE login_curs CURSOR FOR
    
          SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM 
    sys.server_principals p LEFT JOIN sys.syslogins l
          ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name <> 'sa'
    ELSE
      DECLARE login_curs CURSOR FOR
    
    
          SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM 
    sys.server_principals p LEFT JOIN sys.syslogins l
          ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name = @login_name
    OPEN login_curs
    
    FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin
    IF (@@fetch_status = -1)
    BEGIN
      PRINT 'No login(s) found.'
      CLOSE login_curs
      DEALLOCATE login_curs
      RETURN -1
    END
    SET @tmpstr = '/* sp_help_revlogin script '
    PRINT @tmpstr
    SET @tmpstr = '** Generated ' + CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */'
    PRINT @tmpstr
    PRINT ''
    WHILE (@@fetch_status <> -1)
    BEGIN
      IF (@@fetch_status <> -2)
      BEGIN
        PRINT ''
        SET @tmpstr = '-- Login: ' + @name
        PRINT @tmpstr
        IF (@type IN ( 'G', 'U'))
        BEGIN -- NT authenticated account/group
    
          SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' FROM WINDOWS WITH DEFAULT_DATABASE = [' + @defaultdb + ']'
        END
        ELSE BEGIN -- SQL Server authentication
            -- obtain password and sid
                SET @PWD_varbinary = CAST( LOGINPROPERTY( @name, 'PasswordHash' ) AS varbinary (256) )
            EXEC sp_hexadecimal @PWD_varbinary, @PWD_string OUT
            EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
     
            -- obtain password policy state
            SELECT @is_policy_checked = CASE is_policy_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name
            SELECT @is_expiration_checked = CASE is_expiration_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name
     
                SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' WITH PASSWORD = ' + @PWD_string + ' HASHED, SID = ' + @SID_string + ', DEFAULT_DATABASE = [' + @defaultdb + ']'
    
            IF ( @is_policy_checked IS NOT NULL )
            BEGIN
              SET @tmpstr = @tmpstr + ', CHECK_POLICY = ' + @is_policy_checked
            END
            IF ( @is_expiration_checked IS NOT NULL )
            BEGIN
              SET @tmpstr = @tmpstr + ', CHECK_EXPIRATION = ' + @is_expiration_checked
            END
        END
        IF (@denylogin = 1)
        BEGIN -- login is denied access
          SET @tmpstr = @tmpstr + '; DENY CONNECT SQL TO ' + QUOTENAME( @name )
        END
        ELSE IF (@hasaccess = 0)
        BEGIN -- login exists but does not have access
          SET @tmpstr = @tmpstr + '; REVOKE CONNECT SQL TO ' + QUOTENAME( @name )
        END
        IF (@is_disabled = 1)
        BEGIN -- login is disabled
          SET @tmpstr = @tmpstr + '; ALTER LOGIN ' + QUOTENAME( @name ) + ' DISABLE'
        END
        PRINT @tmpstr
      END
    
      FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin
       END
    CLOSE login_curs
    DEALLOCATE login_curs
    RETURN 0
    GO
    


    Примітка. Цей скрипт створює два збережена процедура в база даних master. Процедури названіsp_hexadecimal і sp_help_revlogin.
  3. Запустіть наступну заяву:
    EXEC sp_help_revlogin
    Вивід скрипт, який генерує sp_help_revlogin Збережена процедура є скрипт входу. Цей скрипт входу створює логіни, що мають оригінальний ідентифікатор безпеки (SID) та початковий пароль.
  4. На сервері B запустити SQL Server управління студії а потім підключитися до екземпляра SQL Server, до яких ви переміщували бази даних.

    Важливо. Перш ніж ви йдете до кроку 5, перегляньте відомості в розділі «Зауваження».
  5. Відкриття нового вікна запиту редактор а потім запустити виводу скрипт, який утворюється у кроці 3.

Зауваження

Перегляньте наступну інформацію, перш ніж ви запустіть сценарій виводу на екземпляр на сервер b:
  • Якщо ви намагаєтеся створити новий Логін SQL Server 2012, використовуючи пре SQL Server 2000 Логін, що це сценарій, з'являється таке повідомлення про помилку:
    MSG 15021, рівень 16, держава 2, лінія 1
    Неприпустиме значення для параметра пароль. Укажіть припустиме значення.
    Примітка. Ви отримуєте цю помилку в SQL Server 2012 через хеш-16-бітовий пароль, який поставляється для створення Логін і змінити Логін заяви.

    Щоб вирішити цю проблему на сервері, на якому запущено SQL Server 2012, створити Логін, який має порожній пароль. Для цього запустіть такі сценарії:
    CREATE LOGIN [Test] WITH PASSWORD = '', SID = 0x90FD605DCEFAE14FAB4D5EB0BBA1AECC, 
    DEFAULT_DATABASE = [master], CHECK_POLICY = ON, CHECK_EXPIRATION = OFF

    Після створення Логін, який має порожній пароль користувачу змінювати пароль при наступному спробу входу.
  • Пароль можна обговорювали трьома способами:
    • VERSION_LEGACY: цей хеш є 16-бітовий pre-SQL Server 2000 хеш.
    • VERSION_SHA1: цей хеш генерується за допомогою алгоритму SHA1 і використовується в SQL Server 2000 через SQL Server 2008 R2.
    • VERSION_SHA2: цей хеш генерується за допомогою SHA2 512 алгоритм і використовується в SQL Server 2012.
  • У SQL Server 2008 R1 і в попередніх версіях pre-SQL Server 2000 хешів паролів були підтримані. Коли користувач увійшли в систему, використовуючи пароль, які використані pre-SQL Server 2000 хеш, хеш було модернізовано використовувати пароль хеш SHA1.
  • Якщо користувач, який має пароль, який використовує pre-SQL Server 2000 хеш існує на сервері, на якому запущено SQL Server 2008 R2, це означає, що користувач не увійшов в на цьому сервері.
  • Огляд сценарію виводу ретельно. Якщо A і B-сервер в різних доменах, ви повинні змінити сценарій виводу. Потім ви повинні замінити оригінальний доменне ім'я за допомогою нове доменне ім'я в операторах створити Логін. Інтегрований логіни, які отримують доступ до нового домену не мають ж SID як на логіни у вихідному домені. Таким чином, користувачі сиротами від цих логіни. Щоб отримати додаткові відомості про те, як усунути ці безгоспних споживачів, клацніть номер статті в базі знань Microsoft Knowledge Base:
    240872 Як вирішити проблеми дозволу, під час переміщення бази даних між серверами, що працюють з SQL Server
    Якщо A і B-сервер у межах одного домену, використовується той же SID. Таким чином, користувачі навряд чи бути створені автоматично.
  • В скрипті виводу на логіни створені за допомогою зашифрований пароль. Це відбувається з HASHED аргументом в операторі створити Логін. Цей аргумент указує, що пароль, введений після аргумент пароль вже обговорювали.
  • За промовчанням лише членом Системний адміністратор фіксованого серверної ролі можна запустити оператор SELECT з sys.server_principals зору. Якщо член Системний адміністратор фіксованого серверної ролі надає необхідні дозволи для користувачів, користувачів не вдалося створити або запустіть сценарій виводу.
  • Кроки, описані в цій статті не переносять бази даних за промовчанням для певного Логін. Це тому, що бази даних за промовчанням не завжди існує на сервер b. Визначте цю базу даних за промовчанням для Логін, використати оператор ALTER Логін передаючи в Логін ім'я та бази даних за промовчанням як аргументи.
  • Урахування регістру A і з урахуванням регістру сервер B: порядок сортування з сервера A може бути без урахування регістру та порядку сортування сервер B можуть бути чутливі до регістру. При цьому повинні вводити користувачі паролі великими буквами після того, як ви передачі на логіни і паролі до примірника на сервер b.

    Урахування регістру A і без урахування регістру сервер B: порядок сортування з сервера A можуть бути чутливі до регістру, а сервер B, порядок сортування може бути без урахування регістру. У цьому разі користувачі не можуть приєднатися за допомогою на логіни і паролі, які передати екземпляр на сервер B якщо одна з таких умов:
    • Оригінальні паролі містять немає листа.
    • В оригінальних паролі які складаються великих літер.
    Урахування регістру або без урахування регістру на обох серверів: порядок сортування з сервера A і B сервера можуть бути чутливі до регістру, або сервер A та B сервера, порядок сортування може бути без урахування регістру. У цих випадках користувачі не відчувають проблеми.
  • Логін, що вже є в чергу на сервері B, можливо, ім'я, яке так само, як ім'я в скрипті виводу. При цьому з'являється таке повідомлення про помилку під час запуску сценарію виводу на екземпляр на сервер b:
    MSG 15025, рівень 16, держава 1, рядок 1
    Основний сервер 'MyLogin' уже існує.
    Аналогічним чином, Логін, що вже є в чергу на сервері B можуть мати SID, які так само, як SID виводу скрипті. При цьому з'являється таке повідомлення про помилку під час запуску сценарію виводу на екземпляр на сервер b:
    MSG 15433, рівень 16, держава 1, рядок 1
    Поставляються параметр sid — використовується.
    Таким чином, ви повинні зробити наступне:
    1. Огляд сценарію виводу ретельно.
    2. Діагностуючи вміст подання sys.server_principals в чергу на сервері b.
    3. Вирішення цих повідомлень про помилки, залежно від обставин.
  • В SQL Server 2005 SID Логін використовуються для реалізації бази даних на рівні доступу. Логін може мати різні Морс у різних баз даних на сервері. У цьому випадку, Логін може тільки отримати доступ до бази даних, яка має ідентифікатор безпеки, який відповідає SID у sys.server_principals поданні. Ця проблема може виникнути, якщо дві бази даних у поєднанні з різних серверів. Щоб вирішити цю проблему, видаляти вручну Логін з бази даних, яка має SID невідповідність за допомогою операторі DROP USER. Потім додайте увійти знову за допомогою створення користувача заяву.

Посилання

Докладніше про усунення безгоспних споживачів, перейдіть до на Усунення проблем: безгоспних споживачів Мережа розробників Майкрософт (MSDN) сайт.

Щоб отримати додаткові відомості про створення Логін заяву, перейдіть до на СТВОРИТИ Логін (Transact-SQL) Веб-сайті MSDN.

Докладніше про оператор ALTER Логін, перейдіть до на АЛЬТЕР Логін (Transact-SQL) Веб-сайті MSDN.

Властивості

Номер статті: 918992 - Востаннє переглянуто: 16 лютого 2014 р. - Редакція: 2.0
Застосовується до:
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL 2005 Server Workgroup
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Workgroup
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2012 Standard
  • Microsoft SQL Server 2012 Developer
  • Microsoft SQL Server 2012 Enterprise
Ключові слова: 
kbsqlsetup kbexpertiseadvanced kbhowto kbinfo kbmt KB918992 KbMtuk
Машинний переклад
ВАЖЛИВО! Ця стаття перекладена засобами машинного перекладу Microsoft. Статтю можна редагувати в середовищі Community Translation Framework (CTF). Щоб якомога швидше перекласти всі статті у своїй базі знань різними мовами, компанія Microsoft не лише звертається до професійних перекладачів, але й вдається до машинного перекладу, який потім редагується спільнотою. Такі статті можуть містити лексичні, синтаксичні та граматичні помилки. Microsoft не несе відповідальності за будь-які неточності, помилки або збитки, до яких може призвести неправильний переклад статей або їх використання. Докладніше про CTF див. на веб-сторінці http://support.microsoft.com/gp/machine-translation-corrections/uk-ua.
Клацніть тут, щоб переглянути цю статтю англійською мовою: 918992

Надіслати відгук

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com