Tomasz Gancarz

Tomasz Gancarz Administrator
serwerów

Temat: Migracja usera z uprawnieniami

Witam,

Przenoszę serwer na nową maszynę. Mam kilku niestandardowych użytkowników, którzy mają nadane prawa EXECUTE do kilkunastu tabel. Da się ich przenieść na nowy serwer za pomocą jakiegoś skryptu czy muszę ręcznie, od nowa nadać prawa?
Paweł Broda

Paweł Broda Software Engineer

Temat: Migracja usera z uprawnieniami

może to pomoże:
http://www.sql-server-performance.com/2002/object-perm...
Marcin S.

Marcin S. Professional SQL
Server Administrator

Temat: Migracja usera z uprawnieniami

Jeżeli przenosisz bazę na nowy serwer, to użytkownicy i uprawnienia na poziomie bazy pozostaną po jej przywróceniu na nową maszynę. Należy natomiast wygenerować skrypty tworzące loginy na starym serwerze i uruchomić je na nowym:

SELECT 'IF(SUSER_ID('+QUOTENAME(SP.name,'''')+') IS NULL)BEGIN CREATE LOGIN '+QUOTENAME(SP.name)+
CASE WHEN SP.type_desc = 'SQL_LOGIN'
THEN ' WITH PASSWORD = '+CONVERT(NVARCHAR(MAX),SL.password_hash,1)+' HASHED'
ELSE ' FROM WINDOWS'
END + ';/*'+SP.type_desc+'*/ END;'
COLLATE SQL_Latin1_General_CP1_CI_AS -- ustawiamy taki collate, jako mamy na serwerze
FROM sys.server_principals AS SP
LEFT JOIN sys.sql_logins AS SL
ON SP.principal_id = SL.principal_id
WHERE SP.type_desc IN ('SQL_LOGIN','WINDOWS_GROUP','WINDOWS_LOGIN')
AND SP.name NOT LIKE '##%##'
AND SP.name NOT IN ('SA');


Po utworzeniu loginów na nowym serwerze trzeba jeszcze powiązać loginy sql server z użytkownikami w bazie. Jeżeli użytkownicy i loginy mają takie same nazwy, to można je powiązać za pomocą poniższego skryptu:

use przywrócona_baza

DECLARE @Username varchar(100), @cmd varchar(100)
DECLARE userLogin_cursor CURSOR FAST_FORWARD
FOR
SELECT UserName = name FROM sysusers
WHERE issqluser = 1 and (sid IS NOT NULL AND sid <> 0×0)
AND suser_sname(sid) IS NULL
ORDER BY name
FOR READ ONLY
OPEN userLogin_cursor

FETCH NEXT FROM userLogin_cursor INTO @Username
WHILE @@fetch_status = 0
BEGIN
SET @cmd = ‘ALTER USER ‘+@username+‘ WITH LOGIN ‘+@username
EXECUTE(@cmd)
FETCH NEXT FROM userLogin_cursor INTO @Username
END
CLOSE userLogin_cursor
DEALLOCATE userLogin_cursor


Jeżeli użytkownicy i loginy posiadają różne nazwy to trzeba ich powiązać samodzielnie:

ALTER user_z_bazy WITH LOGIN przeniesiony_login
Tomasz Gancarz

Tomasz Gancarz Administrator
serwerów

Temat: Migracja usera z uprawnieniami

Dziękuję bardzo za konkretną i wyczerpującą odpowiedź.

Pozdrawiam
Dorota Moskalewicz

Dorota Moskalewicz Administrator sieci,
SERTOP Sp. z o.o.

Temat: Migracja usera z uprawnieniami

Jedna uwaga, przy powiązaniu loginów po WITH LOGIN musi być znak = (jak poniżej) żeby to zadziałało, przynajmniej tak jest w ms sql server 2008
(SET @cmd = ‘ALTER USER ‘+@username+‘ WITH LOGIN =‘+@username)



Wyślij zaproszenie do