среда, 22 мая 2013 г.

Скрипт список разрешений пользователей на сервер MS SQL Server


 При миграции с одного 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 int
EXEC @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.
Надеюсь скрипт Вам пригодится.

1 комментарий :

  1. Спасибо! а скрипта выгружающего статистику уз sa у вас нет? например когда последний раз пароли меняли, как часто входили.

    ОтветитьУдалить