При миграции с одного
MS SQL server на
другой сервер, переустановки сервера необходимо кроме как скопировать учетные записи, нужно скопировать и их разрешения на
сервер MS SQL Server.
Ниже приводится скрипт получения списка прав на MS SQL Server(скрипт применим для версий 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 from sys.endpoints where endpoint_id=s.major_id)
+'] TO ['+p.name+']'collate Cyrillic_General_CI_AS
else
'GRANT '+s.permission_name +' ON ENDPOINT::['+(select name from sys.endpoints where endpoint_id=s.major_id)
+'] TO ['+p.name+'] ' +'WITH GRANT OPTION ' collate Cyrillic_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 from sys.server_principals where principal_id=s.major_id)+'] TO ['+p.name+']'collate Cyrillic_General_CI_AS
else
'GRANT '+s.permission_name +' ON LOGIN::['+(select name from sys.server_principals where principal_id=s.major_id)
+'] TO ['+p.name+'] ' +'WITH GRANT OPTION ' collate Cyrillic_General_CI_AS
end
end
,p.name
,s.permission_name
,s.class_desc
--,*
from sys.server_permissions s inner join sys.server_principals p
on s.grantee_principal_id=p.principal_id
where
s.permission_name<>'CONNECT SQL'
and
p.name not like '##%'
Результат можно запроса можно выгрузить в файл, только
предварительно оставив в результирующем
наборе только поле «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.
Надеюсь скрипт Вам пригодится.
Спасибо! а скрипта выгружающего статистику уз sa у вас нет? например когда последний раз пароли меняли, как часто входили.
ОтветитьУдалить