Quantcast
Channel: Немножко всего .. из жизни администратора ms sql server
Viewing all articles
Browse latest Browse all 43

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

$
0
0

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

Viewing all articles
Browse latest Browse all 43

Latest Images

Trending Articles