Ako previesť prihlasovacie mená a heslá medzi inštanciami programu SQL Server

Preklady článku Preklady článku
ID článku: 918992 - Zobraziť produkty, ktorých sa tento článok týka.
Rozbaliť všetko | Zbaliť všetko

Na tejto stránke

ÚVOD

Tento článok popisuje postup pri prenose prihlasovacie mená a heslá medzi inštanciami programu Microsoft SQL Server 2005, Microsoft SQL Server 2008 a Microsoft SQL Server 2012 na rôznych serveroch.

Ďalšie informácie o tom, ako odovzdať prihlasovacie mená a heslá medzi inštanciami ostatných verzií SQL Server, po kliknutí na nasledovné číslo článku publikovaného v databáze Microsoft Knowledge Base:
246133 Ako previesť prihlasovacie mená a heslá medzi inštanciami programu SQL Server

Ďalšie informácie

V tomto článku, server a server B sú rôzne servery. Okrem toho, server a server B používate SQL Server 2005.

Poznámka Tieto informácie platia aj pre SQL Server 2008 a SQL Server 2012.

Po presunutí databázy z inštanciu servera SQL Server na serveri A na inštanciu servera SQL Server na server B, užívatelia môžu byť schopný sa prihlásiť do databázy na serveri B. Okrem toho, užívatelia mô?ete dosta nasledujúce chybové hlásenie:
Prihlasovanie pre používateľa "MyUser'. (Microsoft SQL Server, Error: 18456)
Tento problém sa vyskytuje, pretože ste urobil neprenášajú prihlasovacie mená a heslá z inštanciu servera SQL Server na serveri A na inštanciu servera SQL Server na serveri B.

Prenos prihlasovacie údaje, použite jednu z nasledujúcich metód, ako vašej situácii najvhodnejší.

Metóda 1: Prihláste sa pomocou hesla vopred-SQL Server 2000

Ak chcete vyriešiť tento problém, požiadajte používateľa o prihlásenie na server so spustenou službou SQL Server pomocou prihlásenie vopred-SQL Server 2000.

Poznámka Password hashing aktualizuje automaticky pri prihlásení užívateľa pomocou vopred-SQL Server 2000 heslo.

Metóda 2: Obnoviť heslo servera SQL Server

Chcete vyriešiť tento problém, resetovať heslo servera SQL Server a potom skript out login.

Poznámka Heslo hashovací algoritmus sa používa pri obnovení hesla.

Metóda 3: Vytvoriť denník v skript, ktorý má prázdne heslo

Vytvorenie denníka v skript, ktorý má prázdne heslo, postupujte nasledovne:
  1. Na serveri, začať SQL Server Management Studio a potom pripojiť k inštancii servera SQL Server, z ktorého ste sa presťahovali databázu.
  2. Otvoriť nové okno a Query Editor, a potom spustiť nasledujúci skript.
    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
    


    PoznámkaTento skript vytvorí dve uložené procedúry v databáze predlohy. Postupy sú pomenovanésp_hexadecimal a sp_help_revlogin.
  3. Spustite nasledujúce vyhlásenie:
    EXEC sp_help_revlogin
    Výstup skript, ktorý generuje sp_help_revlogin uložené postup je prihlasovací skript. Tento prihlasovací skript vytvorí prihlasovacie údaje, ktoré majú pôvodný identifikátor zabezpečenia (SID) a pôvodné heslo.
  4. Na server B, začať SQL Server Management Studio a potom pripojiť k inštancii servera SQL, ku ktorému ste sa presťahovali databázu.

    Dôležité Predtým, než idete na krok 5, prezrite si informácie v časti "Poznámky".
  5. Otvoriť nové okno a Query Editor, a potom spustiť skript výstup, ktorý je vytvorený v kroku 3.

Poznámky

Prezrite si nasledujúce informácie pred spustením skriptu výstup na inštancii na serveri B:
  • Ak sa pokúsite vytvoriť nové SQL Server 2012 prihlásiť pomocou vopred-SQL Server 2000 prihlasovacie údaje, ktoré je scenár, dostanete nasledujúcu chybu:
    MSG 15021, úroveň 16, štát 2, riadok 1
    Neplatná hodnota pre parameter PASSWORD. Zadajte platnú hodnotu.
    Poznámka Dostanete túto chybu v SQL Server 2012 pretože 16-bajtové heslo hash dodané pre prihlásenie vytvoriť a zmeniť prihlasovacie vyhlásenia.

    Ak chcete vyriešiť tento problém na serveri so spustenou službou SQL Server 2012, vytvoriť prihlasovacie údaje, ktoré má prázdne heslo. Vykonáte to spustiť nasledujúci skript:
    CREATE LOGIN [Test] WITH PASSWORD = '', SID = 0x90FD605DCEFAE14FAB4D5EB0BBA1AECC, 
    DEFAULT_DATABASE = [master], CHECK_POLICY = ON, CHECK_EXPIRATION = OFF

    Po vytvorení prihlásenia, ktoré má prázdne heslo, používateľ môže zmeniť heslo pri ďalšom pokuse o prihlásenie.
  • Heslo môže byť hash tromi spôsobmi:
    • VERSION_LEGACY: tento hash je 16-bajtové vopred-SQL Server 2000 hash.
    • VERSION_SHA1: tento hash sa generuje pomocou algoritmu SHA1 a je používaný v SQL Server 2000 až po SQL Server 2008 R2.
    • VERSION_SHA2: tento hash sa generuje pomocou algoritmu SHA2 512 a je používaný v SQL Server 2012.
  • V SQL Server 2008 R1 a v starších verziách boli podporované vopred-SQL Server 2000 heslo hash. Keď používateľ prihlásený pomocou hesla, ktoré používajú vopred-SQL Server 2000 hash, hash bola aktualizovaná používať SHA1 hash hesla.
  • Ak používateľ, ktorý má heslo, ktoré používa hašu vopred-SQL Server 2000 na serveri so spustenou službou SQL Server 2008 R2, to znamená, že používateľ má neprihlásili na server.
  • Pozorne si prezrite výstup skript. Ak server a server B sú v rozdielnych doménach, budete musieť zmeniť skript výstup. Potom musíte nahradiť pôvodný názov domény pomocou nový názov domény vo výkazoch vytvoriť prihlásenie. Integrované prihlasovanie udelený prístup v novú doménu nemajú rovnaký SID ako prihlasovacie údaje v pôvodnej doméne. Preto, používatelia sú osirelé z týchto prihlásenie. Ďalšie informácie o riešení týchto osamotené používateľov, kliknite na nasledovné číslo článku publikovaného v databáze Microsoft Knowledge Base:
    240872 Ako riešiť problémy s povolením pri presúvaní databázy medzi serverom so systémom SQL Server
    Ak server a server B sú v rovnakej doméne, použije sa rovnaký SID. Užívatelia sú preto pravdepodobne zostať osamotený.
  • V skript výstup, prihlásenia sú vytvorené pomocou šifrované heslo. Je to spôsobené HASHED argument vo vyhlásení vytvoriť prihlásenie. Tento argument špecifikuje, že heslo, ktoré sa zapisuje po argumente heslo je už hash.
  • Podľa predvoleného nastavenia len členom úlohu sysadmin pevné servera môžete spustiť príkaz SELECT z pohľadu sys.server_principals . Ak nie je členom sysadmin pevné servera dbcreator granty potrebné povolenia pre používateľov, používateľov nemožno vytvoriť alebo spustiť skript výstup.
  • Kroky v tomto článku sa neprenášajú predvolená databáza informácie najmä login. To je, pretože predvolená databáza nemusí vždy existovať na serveri B. Ak chcete definovať predvolenú databázu pre prihlásenie, použite príkaz zmeniť prihlasovacie prechodom cez prihlasovacie meno a predvolenú databázu ako argumenty.
  • Case-insensitive servera A a písmená B: poradie zoradenia server A môže byť case-insensitive, a poradie zoradenia servera B môžu byť case-sensitive. V tomto prípade musia používatelia zadať heslá veľkými písmenami po dokončení prevodu prihlasovacie mená a heslá k inštancii na serveri B.

    Rozlišujú server a case-insensitive server B: zoradenie servera A môžu byť case-sensitive, a poradie zoradenia servera B môže byť case-insensitive. V tomto prípade užívatelia nemôžu prihlásiť pomocou prihlasovacie mená a heslá, ktoré prenášate stupňa na server B, pokiaľ je splnená jedna z nasledujúcich podmienok:
    • Pôvodné heslo obsahovať žiadne písmená.
    • Všetky písmená v pôvodnom heslá sú veľkými písmenami.
    Malé a veľké písmená alebo case-insensitive na oboch serveroch: poradie zoradenia server a server B môžu byť case-sensitive, alebo zoradenia server a server B môže byť case-insensitive. V týchto prípadoch sa užívatelia nemajú skúsenosti problém.
  • To už je na stupni na serveri B Prihlásenie môže mať názov, ktorý je rovnaký ako názov v skript výstup. V tomto prípade sa nasledujúce chybové hlásenie pri spustení skriptu výstup na inštancii na serveri B:
    MSG 15025, úroveň 16, štát 1, linka 1
    Hlavný server "MyLogin"už existuje.
    Podobne, to už je na stupni na serveri B Prihlásenie môže mať zabezpečovací identifikátor, ktorý je rovnaký ako identifikátor v skript výstup. V tomto prípade sa nasledujúce chybové hlásenie pri spustení skriptu výstup na inštancii na serveri B:
    MSG 15433, úroveň 16, štát 1, linka 1
    Zadaný parameter sid sa používa.
    Preto musíte urobiť nasledovné:
    1. Pozorne si prezrite výstup skript.
    2. Preskúmajte obsah sys.server_principals zobrazenia v inštancii servera B.
    3. Riešenie týchto chybových hlásení podľa potreby.
  • V SQL Server 2005, SID pre prihlásenie slúži na realizáciu databázy-úrovni prístup. Prihlasovacie údaje môžu mať rôzne SIDs rôznych databáz na serveri. V tomto prípade sa prihlásiť iba prístup databázy, ktorá obsahuje identifikátor SID, ktorý zodpovedá SID v sys.server_principals zobrazení. Tento problém môže nastať ak dvoch databáz sú kombinované z rôznych serverov. Ak chcete vyriešiť tento problém, ručne odstrániť prihlasovacie údaje z databázy, ktorá má SID nesúlad s použitím príkaze DROP USER. Potom môžete pridať prihlasovacie údaje znova pomocou príkazu vytvoriť používateľa.

Odkazy

Ďalšie informácie o riešení problémov s osirelé používateľov, prejdite na Riešenie problémov s osirelé užívateľov Microsoft Developer Network (MSDN) webovej stránky.

Ďalšie informácie o príkaz vytvoriť prihlasovacie údaje, prejdite na Vytvorenie prihlásenia (Transact-SQL) Webovej lokalite MSDN.

Ďalšie informácie o príkaz zmeniť prihlasovacie údaje, prejdite na ZMENIŤ prihlásenie (Transact-SQL) Webovej lokalite MSDN.

Vlastnosti

ID článku: 918992 - Posledná kontrola: 16. februára 2014 - Revízia: 2.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • 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
Kľúčové slová: 
kbsqlsetup kbexpertiseadvanced kbhowto kbinfo kbmt KB918992 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok je preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft a možno ho opraviť prostredníctvom technológie Community Translation Framework (CTF). Microsoft ponúka strojovo preložené články, články upravené komunitou aj články preložené prekladateľmi, aby zabezpečil prístup ku všetkým článkom databázy Knowledge Base vo viacerých jazykoch. Strojovo preložené články aj upravené články môžu obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky. Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené neprávnym prekladom obsahu alebo jeho použitím zo strany našich zákazníkov. Ďalšie informácie o technológii CTF nájdete na lokalite http://support.microsoft.com/gp/machine-translation-corrections/sk.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem: 918992

Odošlite odozvu

 

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