Как да прехвърля събиране на данни за вход и назначена програма за кражба на пароли между екземпляри на SQL Server

Преводи на статии Преводи на статии
ID на статията: 918992 - Преглед на продукти, за които се отнася тази статия.
Разгъване на всички | Сгъване на всички

На тази страница

ВЪВЕДЕНИЕ

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

За Още действия информация как да пренасяте вход и назначена програма за кражба на пароли между екземпляри на други версии на SQL Server щракнете върху следния номер на статия в база знания на Microsoft:
246133 Как да прехвърля събиране на данни за вход и назначена програма за кражба на пароли между екземпляри на SQL Server

Допълнителна информация

В тази статия сървър А и Б сървър са различни сървъри. Освен това сървър А и Б сървър се изпълнява SQL Server 2005.

Бележка Тази информация се отнася за SQL Server 2008 и SQL Server 2012.

След преместване на транзитна база събиране на данни събиране на данни Препоръчано от непълно копиране на SQL Server на сървъра A екземпляр на SQL Server на сървъра Б, потребителите могат да бъдат не може да влезете в базата събиране на данни на сървъра б. Освен това, потребителите могат да получат следното съобщение за грешка:
Вход е неуспешна за потребител "MyUser'. (Microsoft SQL Server, грешка: 18456)
Този проблем възниква, защото вие не е прехвърляне вход и назначена програма за кражба на пароли Препоръчано от непълно копиране на SQL Server на сървъра A екземпляр на SQL Server на сървъра б.

За да прехвърлите събиране на данни за вход, използвайте един Препоръчано от следните методи, най-подходящия за вашата ситуация.

Метод 1: Влезте чрез предварително-SQL Server 2000 парола

За да разрешите този проблем, поискайте Препоръчано от потребителя да влезете в сървъра, на който работи SQL Server с помощта на предварително-SQL Server 2000 login.

Бележка Парола hashing се актуализира автоматично, когато потребител влезе с помощта на предварително-SQL Server 2000 парола.

Метод 2: Нулиране на паролата в SQL Server

За да разрешите този проблем, нулиране на паролата в SQL Server и след това скрипт посочени вход.

Бележка Парола hashing алгоритъм се използва, когато възстановите паролата.

Метод 3: Създаване на регистър на скрипт, който има празна парола

За да създадете регистрационен файл в скрипт, който има празна парола, изпълнете следните стъпки:
  1. На сървъра A стартирате SQL Server Студио за управление и след това се свърже с екземпляра на SQL сървъра, Препоръчано от който сте преместили транзитна база събиране на данни събиране на данни.
  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
    


    БележкаТози скрипт създава две съхранени процедури в главнатранзитна база събиране на данни събиране на данни. Процедурите са с преобразуване на именаsp_hexadecimal и sp_help_revlogin.
  3. Изпълнете следната декларация:
    EXEC sp_help_revlogin
    Продукцията скрипт, който генерира sp_help_revlogin съхраняват процедура е определителен член login ръкопис. Този вход скрипт създава влизания, които имат оригинален идентификатор за защита (SID) и първоначалната парола.
  4. На сървъра Б стартирате SQL Server Студио за управление и след това се свърже с екземпляра на SQL Server, към който сте преместили транзитна база събиране на данни събиране на данни.

    Важно Преди да преминете към стъпка 5, преглед на информацията в раздел "Забележки".
  5. Отворете нов прозорец, Запитване редактор и тогава тичам изход скрипт, който е генериран в стъпка 3.

Забележки

Прегледайте следната информация, преди да изпълните скрипта продукция на екземпляр на сървъра б:
  • Ако се опитате да създадете нова регистрация в 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 парола кълцам бяха подкрепени. Когато даден потребител сте логнати с помощта на парола, която използва предварително-SQL Server 2000 хеш, хеш е обновена, за да използвате SHA1 кълцам парола.
  • Ако потребител, който е с парола, която използва предварително-SQL Server 2000 хеш съществува на сървър, който е стартиран SQL Server 2008 R2, това означава, че потребителят не е влязъл този сървър.
  • Преглед на изходния скрипт внимателно. Ако сървър А и Б сървър са в различни области, ще трябва да промени сценария за изход. След това вие трябва да замени оригиналното име за влизане на домейн Препоръчано от най-високо ниво с помощта на ново име за влизане на домейн Препоръчано от най-високо ниво във вход за създаване на отчети. Интегрирана влизания, които получават достъп в новия домейн Препоръчано от най-високо ниво не са една и съща SID като влизания в оригиналния домейн Препоръчано от най-високо ниво. Следователно потребителите са починали Препоръчано от тези регистрации. За Още действия информация как да отстраните тези сираци потребители щракнете върху следния номер на статия в база знания на Microsoft:
    240872 Как да разреши разрешение въпроси, когато преместите транзитна база събиране на данни събиране на данни между сървъри, които изпълняват SQL Server
    Ако сървър А и Б сървър са в същия домейн Препоръчано от най-високо ниво, една и съща SID се използва. Следователно потребителите се очаква да бъде сираци.
  • В продукцията скрипт вход са създадени с помощта на криптирана парола. Това се дължи HASHED аргумент в отчета за създаване на вход. Този аргумент задава, че паролата, която се въвежда след на парола аргумент е хеширан вече.
  • по подразбиране само член на фиксирани сървър ролята на системния администратор може да управлява Избери изявление Препоръчано от изгледа на sys.server_principals . Освен ако не е член на незаменим определени роля сървър предоставя необходимите разрешения на потребителите, потребителите не може да създаде или изпълни скрипта, изход.
  • В тази статия стъпки не прехвърлят информация за транзитна база събиране на данни събиране на данни по подразбиране за конкретен вход. Това е така, защото транзитна база събиране на данни събиране на данни по подразбиране може да не винаги съществува на сървъра б. За да зададете по подразбиране транзитна база събиране на данни събиране на данни за вход, използвайте отчета за промяна вход като преминават в потребителско име за влизане и транзитна база събиране на данни събиране на данни по подразбиране като аргументи.
  • Подниз сървър А и Б главни сървър: реда на сортиране на сървър А може да е нечувствителна към регистъра, и реда на сортиране на сървъра Б могат да бъдат малки и главни букви. В този случай потребителите трябва да въведете назначена програма за кражба на пароли във всички главни букви, след като прехвърлите вход и назначена програма за кражба на пароли на съд на сървъра б.

    Главни сървър А и Б подниз сървър: реда на сортиране на сървър А могат да бъдат малки и главни букви, и реда на сортиране на сървъра Б може да бъде нечувствителна към регистъра. В този случай потребителите не може да влезете с помощта на вход и назначена програма за кражба на пароли, които прехвърляте екземпляр на сървъра Б, освен ако е налице едно Препоръчано от следните условия:
    • Оригиналната назначена програма за кражба на пароли съдържат не писма.
    • Всички букви в оригиналния назначена програма за кражба на пароли са главни букви.
    с различаване на главните и малките букви или подниз на двата сървъра: реда на сортиране на сървър А и Б сървър могат да бъдат малки и главни букви, или реда на сортиране на сървър А и Б сървър може да е нечувствителна към регистъра. В тези случаи потребителите не изпитват проблем.
  • Вход, който вече е на инстанция на сървъра Б може да има име за влизане, което е същото като име за влизам изходния скрипт. В този случай получавате следното съобщение за грешка, когато стартирате скрипта продукция на екземпляр на сървъра б:
    MSG 15025, ниво 16, държавата 1, ред 1
    Главен сървър "MyLogin"вече съществува.
    По същия начин вход, който вече е на инстанция на сървъра Б може да има Сид, която е същата като SID в изходния скрипт. В този случай получавате следното съобщение за грешка, когато стартирате скрипта продукция на екземпляр на сървъра б:
    MSG 15433, ниво 16, държавата 1, ред 1
    Подаденият параметър sid се използва.
    Следователно трябва да направите следното:
    1. Преглед на изходния скрипт внимателно.
    2. Проучете съдържанието на изгледа на sys.server_principals в случай на сървъра б.
    3. Отговори на тези съобщения за грешки при необходимост.
  • В SQL Server 2005 SID за вход се използва за Изпълни с базата събиране на данни на ниво достъп. Регистрация може да има различни SIDs в различни бази събиране на данни на сървър. В този случай вход само достъп до базата събиране на данни, която е SID, който отговаря на SID в изгледа на sys.server_principals . Този проблем може да възникне, ако двете бази събиране на данни са обединени Препоръчано от различни сървъри. За да разрешите този проблем, премахнете ръчно вход Препоръчано от базата събиране на данни, която е SID несъответствие с помощта на командата DROP user. След това добавете влезете отново с помощта на отчета за създаване на потребител.

Библиография

За Още действия информация как да отстраните сираци потребители, отидете на Отстраняване на неизправности при откриваме засегнатите потребители Мрежата за разработчици на Microsoft (MSDN) сайт.

За Още действия информация за отчета за създаване на влизане, отидете на СЪЗДАВАНЕ на влизане (преговарям SQL) MSDN сайт.

За Още действия информация за отчета за промени влизане, отидете на ПРОМЯНА вход (преговарям SQL) MSDN сайт.

Свойства

ID на статията: 918992 - Последна рецензия: 18 март 2014 г. - Редакция: 2.0
Важи за:
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • 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 KbMtbg
Machine-translated Article
ВАЖНО: Тази статия е преведена с използване на софтуер за машинен превод на Microsoft и може да бъде коригирана чрез технологията Рамка за превод от общността (CTF). Microsoft предлага статии, преведени машинно, допълнително редактирани от общността, и статии, преведени от хора, за да може да предостави достъп на много езици до всички статии в нашата База знания. Статиите, преведени машинно и редактирани допълнително, може да съдържат грешки в лексиката, синтаксиса и/или граматиката. Microsoft не носи отговорност за каквито и да било неточности, грешки или вреди, предизвикани от неправилен превод на съдържанието или използването му от нашите клиенти. Повече за CTF – на http://support.microsoft.com/gp/machine-translation-corrections/bg.
Щракнете тук, за да видите версия на тази статия на английски: 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