Cum se transferă numele de utilizator și parolele de la un server SQL 2018 la alt server SQL 2018

După ce mutați o bază de date de la o instanță de SQL Server pe serverul A la instanța de SQL Server pe server B, utilizatorul nu poate fi în măsură să vă conectați la serverul de baze de date B. În plus, este posibil să primiți următorul mesaj de eroare: Conectarea a eșuat pentru „utilizator“ utilizator. (Microsoft SQL Server, eroare: 18456). Această problemă apare deoarece numele de conectare și parolele nu au fost mutate din instanța serverului SQL pe serverul A la instanța serverului SQL pe serverul B.







Pentru a rezolva această problemă, trebuie să urmați următorul algoritm:

1. Pe serverul A prin intermediul programului „managerului de baze» (administrator MSDE) pentru a se conecta la o instanță de SQL Server, care sa mutat din baza de date (dacă ați instalat Microsoft SQL Server, puteți utiliza SQL Server Management Studio (sau SQL Manager).

Atenție, vă rog. pentru executarea corectă a scriptului, trebuie mai întâi să copiați textul scriptului din acest manual în WordPad. Apoi, din WordPad, copiați textul în Notepad.

DACĂ OBJECT_ID ('sp_hexadecimal') NU ESTE NULL

PROCEDURA DROP sp_hexadecimal

CREATE PROCEDURE sp_hexadecimal

@hexvalue varchar (514) OUTPUT

DECLARE @charvalue varchar (514)

DECLARE @ lungime int

DECLARE @hexstring char (16)

SELECT @charvalue = '0x'

SELECT @length = DATALENGTH (@binvalue)

SELECT @hexstring = '0123456789ABCDEF'

ÎN TIMP (@i <= @length)

DECLARE @tempint int

DECLARE @firstint int

DECLARE @secondint int

SELECT @tempint = CONVERT (int, SUBSTRING (@ binvalue, @ i, 1))

SELECTați @firstint = FLOOR (@ tempint / 16)

SELECT @secondint = @tempint - (@ firstint * 16)

SELECT @charvalue = @charvalue +

SUBSTRING (@hexstring, @ firstint + 1, 1) +

SUBSTRING (@hexstring, @ secondint + 1, 1)

SELECTați @hexvalue = @charvalue

DACĂ OBJECT_ID ('sp_help_revlogin') NU ESTE NULL

PROCEDURA DROP sp_help_revlogin

CREAȚI PROCEDURA 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

DACĂ (@login_name este NULL)

DECLARE login_curs CURSOR PENTRU

SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin DIN

sys.server_principals p LEFT JOIN sys.syslogins l

ON (l.name = p.name) WHERE p.type IN ('S', 'G', 'U') ȘI p.name <> 'Sa'

DECLARE login_curs CURSOR PENTRU

SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin DIN

sys.server_principals p LEFT JOIN sys.syslogins l

ON (l.name = p.name) WHERE p.tip IN ('S', 'G', 'U') ȘI p.name = @login_name

FETCH URMATOAREA login_curs ÎN @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin

DACĂ (@@ fetch_status = -1)

PRINT "Eiaia ia iaeaaiu".

SET @tmpstr = '/ * scriptul sp_help_revlogin'

SET @tmpstr = '** generat' + CONVERT (varchar, getDate ()) + 'on' + @@ SERVERNAME + '* /'







ÎN TIMP (@@ fetch_status <> -1)

DACĂ (@@ fetch_status <> -2)

SET @tmpstr = '- Login:' + @ nume

IF (@ tip IN ('G', 'U'))

BEGIN - cont / grup autentificat NT

SET @tmpstr = 'CREATE LOGIN' + QUOTENAME (@name) + 'DIN WINDOWS CU DEFAULT_DATABASE = [' + @defaultdb + ']'

ELSE BEGIN - Autentificare SQL Server

-- obține parola și sid

SET @PWD_varbinary = CAST (LOGINPROPERTY (@ nume, 'PasswordHash') AS varbinary (256))

EXEC sp_hexadecimal @PWD_varbinary, @PWD_string OUT

EXEC sp_hexadecimal @ SID_varbinary, @ SID_string OUT

-- obțineți politica de stare a parolei

SELECT @is_policy_checked = CASE is_policy_checked CÂND 1 ATUNCI ON CÂND 0 ATUNCI 'OFF' END ELSE NULL FROM sys.sql_logins WHERE nume = @name

SELECT @is_expiration_checked = CASE is_expiration_checked CÂND 1 ATUNCI ON CÂND 0 ATUNCI 'OFF' END ELSE NULL FROM sys.sql_logins WHERE nume = @name

SET @tmpstr = 'CREATE LOGIN' + QUOTENAME (@name) + 'WITH PASSWORD =' + @PWD_string + 'trunchiată SID =' + @SID_string + 'DEFAULT_DATABASE = [' + @defaultdb + ']'

DACĂ (@is_policy_checked NU ESTE NULL)

SET @tmpstr = @tmpstr + ', CHECK_POLICY =' + @is_policy_checked

DACĂ (@is_expiration_checked NU ESTE NULL)

SET @tmpstr = @tmpstr + ', CHECK_EXPIRATION =' + @is_expiration_checked

DACĂ (@denylogin = 1)

BEGIN - accesul la conectare este refuzat

SET @tmpstr = @tmpstr + '; DENY CONNECT SQL la '+ QUOTENAME (@name)

ELSE IF (@hasaccess = 0)

BEGIN - autentificarea există dar nu are acces

SET @tmpstr = @tmpstr + '; REVOKE CONNECT SQL la '+ QUOTENAME (@ nume)

DACĂ (@is_disabled = 1)

BEGIN - autentificarea este dezactivată

Setați @tmpstr = @tmpstr + '; ALTER LOGIN '+ QUOTENAME (@ nume) +' DISABLE '

FETCH URMATOAREA login_curs ÎN @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin

Notă. scriptul creează două proceduri stocate în baza de date master - sp_hexadecimal și sp_help_revlogin.

3. Rulați următorul scenariu:

Un script creat de procedura memorată sp_help_revlogin. este scriptul de autentificare. Acest script creează nume de conectare cu codul de securitate original și parola.

4. Pe serverul B, porniți administratorul bazei de date de program (Administrator MSDE) (dacă ați instalat Microsoft SQL Server, puteți utiliza SQL Server Management Studio (sau SQL Manager)), și apoi conectați la o instanță de SQL Server, pe locația bazei de date.

Atenție, vă rog. Înainte de a finaliza pasul 5, citiți blocul de note de mai jos.

Înainte de a executa scriptul de ieșire în instanță pe serverul B, trebuie să citiți informațiile prezentate mai jos.

2. În scriptul de ieșire, numele de conectare sunt create cu o parolă criptată. Acest lucru se datorează argumentului HASHED pentru instrucțiunea CREATE LOGIN. Acest argument indică faptul că parola introdusă după argumentul PASSWORD este deja hashed.

3. În mod implicit, numai membrii cu un rol fix al serverului sysadmin pot executa o instrucțiune SELECT din vizualizarea sys.server_principals. Utilizatorii pot crea sau executa scriptul final numai dacă un membru cu rol predefinit de server sysadmin le dă permisiunile necesare.

4. Când efectuați pașii din acest articol, informațiile despre baza de date implicită pentru un anumit nume de conectare nu sunt mutate. Acest lucru se datorează faptului că baza de date implicită ar putea să nu existe pe serverul B. Pentru a determina baza de date implicită pentru conectare, utilizați instrucțiunea ALTER LOGIN, specificând login-ul și baza de date implicit ca argumente.

5. Atunci când sortați pe serverul A, este posibil să nu se facă diferența între majuscule și majuscule, iar serverul B să fie luat în considerare. În acest caz, după mutarea numelui de conectare și a parolei la instanța de pe serverul B, utilizatorii trebuie să introducă parole cu toate literele mari.

6. În plus, este posibil ca sortarea pe serverul A să fie sensibilă la minuscule și serverul B nu este înregistrat. În acest caz, utilizatorii nu vor putea să se conecteze cu numele și parolele mutate în instanță pe serverul B dacă nu este îndeplinită una dintre următoarele condiții:

# 9642; parolele sursă nu conțin litere;

# 9642; toate literele din parolele inițiale sunt majuscule.

Dacă registrul este luat în considerare sau nu este luat în considerare la sortarea simultană pe ambele servere, această problemă nu apare.

7. Dacă numele de conectare care este deja prezent în instanță pe serverul B se potrivește cu numele din scriptul de ieșire, când executați scriptul în instanță de pe server, primiți următorul mesaj de eroare:

MESAJ. 15025, nivelul 16, starea 1, linia 1
Serverul membru "user" există deja.

Dacă numele de conectare care este deja prezent în instanța de pe serverul B se potrivește cu ID-ul de securitate din scriptul de ieșire, când executați scriptul în instanța de pe server, primiți următorul mesaj de eroare:

MESAJ. 15433, nivelul 16, starea 1, linia 1
Se utilizează identificatorul de securitate specificat al parametrului.

Prin urmare, trebuie să urmați pașii de mai jos.

# 9642; Corectați erorile care corespund mesajelor.







Articole similare

Trimiteți-le prietenilor: