При миграции с одного MSSQLserverна другой сервер, переустановки сервера необходимо кроме как скопировать учетные записи, нужно скопировать и их разрешения на сервер MSSQLServer.
Ниже приводится скрипт получения списка прав на MSSQLServer(скрипт применим для версий MS SQL Server 2005 и старше):
select
'sqlcommand'=case
when s.class_desc='SERVER'then
case
when s.state_desc<>'GRANT_WITH_GRANT_OPTION'then
s.state_desc+''+s.permission_name +' TO ['+p.name+']'collate Cyrillic_General_CI_AS
else
'GRANT '+s.permission_name +' TO ['+p.name+'] '+'WITH GRANT OPTION 'collate Cyrillic_General_CI_AS
end
when s.class_desc='ENDPOINT'then
case
when s.state_desc<>'GRANT_WITH_GRANT_OPTION'then
s.state_desc+''+s.permission_name +' ON ENDPOINT::['+(select name fromsys.endpointswhereendpoint_id=s.major_id)
+'] TO ['+p.name+']'collateCyrillic_General_CI_AS
else
'GRANT '+s.permission_name +' ON ENDPOINT::['+(select name fromsys.endpointswhereendpoint_id=s.major_id)
+'] TO ['+p.name+'] '+'WITH GRANT OPTION 'collateCyrillic_General_CI_AS
end
when s.class_desc='SERVER_PRINCIPAL'then
case
when s.state_desc<>'GRANT_WITH_GRANT_OPTION'then
s.state_desc+''+s.permission_name +' ON LOGIN::['+
(select name fromsys.server_principalswhere principal_id=s.major_id)+'] TO ['+p.name+']'collateCyrillic_General_CI_AS
else
'GRANT '+s.permission_name +' ON LOGIN::['+(select name fromsys.server_principalswhere principal_id=s.major_id)
+'] TO ['+p.name+'] '+'WITH GRANT OPTION 'collateCyrillic_General_CI_AS
end
end
,p.name
,s.permission_name
,s.class_desc
--,*
fromsys.server_permissions s innerjoinsys.server_principals p
on s.grantee_principal_id=p.principal_id
where
s.permission_name<>'CONNECT SQL'
and
p.name notlike'##%'
Результат можно запроса можно выгрузить в файл, только предварительно оставив в результирующем наборе только поле «sqlcommand».
Можно настроить выгрузку результата в файл(алгоритм выгрузки взят с sql.ru):
DECLARE @result intEXEC @result =master..xp_cmdshell
'sqlcmd -S localhost -E -Q "Текствышеуказанногоскрипта" -b -o c:\mssqlUserPermissions.txt', no_output
IF (@result = 0)
PRINT'Success'ELSE
PRINT'Failure'
Этот скрип совместно с скриптом "Скриптование всех пользователей, ролей БД и их прав"поможет перенести Вам права пользователей в MS SQL Server.
Кстати, напоминаю, что скрипт копирования самих пользователей с их SID-ами находится на сайте Microsoft.
НадеюсьскриптВампригодится.