Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Аудит доступа  [new]
forrfor
Member

Откуда:
Сообщений: 49
Привет!

В базе накопилось много пользователей и объектов. Права назначены хаотично. Нужно провести аудит доступа и начать хочется с отчета что сейчас есть. Есть какие-то решения? Может, sql-запрос или тулза какая? Заходить в каждый объект, роль, пользователя в Management Studio и смотреть что у него там слишком трудоемко. Спасибо.
6 авг 13, 20:58    [14672153]     Ответить | Цитировать Сообщить модератору
 Re: Аудит доступа  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
forrfor
Привет!

В базе накопилось много пользователей и объектов. Права назначены хаотично. Нужно провести аудит доступа и начать хочется с отчета что сейчас есть. Есть какие-то решения? Может, sql-запрос или тулза какая? Заходить в каждый объект, роль, пользователя в Management Studio и смотреть что у него там слишком трудоемко. Спасибо.

Доброе утро. А можно увидеть результат выполнения запроса
PRINT @@VERSION
7 авг 13, 08:21    [14673454]     Ответить | Цитировать Сообщить модератору
 Re: Аудит доступа  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
select
[Login Type]=
case sp.type
when 'u' then 'WIN'
when 's' then 'SQL'
when 'g' then 'GRP'
end,
convert(char(45),sp.name) as srvLogin,
convert(char(45),sp2.name) as srvRole,
convert(char(25),dbp.name) as dbUser,
convert(char(25),dbp2.name) as dbRole
from
sys.server_principals as sp join
sys.database_principals as dbp on sp.sid=dbp.sid join
sys.database_role_members as dbrm on dbp.principal_Id=dbrm.member_principal_Id join
sys.database_principals as dbp2 on dbrm.role_principal_id=dbp2.principal_id left join
sys.server_role_members as srm on sp.principal_id=srm.member_principal_id left join
sys.server_principals as sp2 on srm.role_principal_id=sp2.principal_id

Что-нибудь типа такого ?
7 авг 13, 08:26    [14673467]     Ответить | Цитировать Сообщить модератору
 Re: Аудит доступа  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Набросок скрипта, написанный на коленке. Показана только идея, для реального применения необходимо доработать напильником. Скорее всего, баян :-)

Запускать с правами sysadmin.
set nocount on;

if object_id('tempdb..#perms') is not null
   drop table #perms;

-- Таблица, содержащая логин, тип логина, пользователя БД, имя объекта, имя столбца объекта (если есть) и имя разрешения
create table #perms (login_name sysname, type_desc nvarchar(60), username sysname null, entity_name sysname, subentity_name sysname, permission_name nvarchar(60));

declare @login_name sysname, @type_desc nvarchar(60);

declare logins_cur cursor local fast_forward for
   select name, type_desc
   from sys.server_principals
   order by name;

open logins_cur;

fetch next from logins_cur into @login_name, @type_desc;

while @@fetch_status = 0
begin
   begin try
      execute as login = @login_name;

      insert #perms(login_name, type_desc, username, entity_name, subentity_name, permission_name)
      select @login_name, @type_desc, null, f.entity_name, f.subentity_name, f.permission_name
      from fn_my_permissions(null, 'SERVER') f;

      
      insert #perms(login_name, type_desc, username, entity_name, subentity_name, permission_name)
      select @login_name, @type_desc, user_name(), f.entity_name, f.subentity_name, f.permission_name
      from fn_my_permissions(null, 'DATABASE') f;

      
      insert #perms(login_name, type_desc, username, entity_name, subentity_name, permission_name)
      select @login_name, @type_desc, user_name(), f.entity_name, f.subentity_name, f.permission_name
      from sys.objects so
           cross apply fn_my_permissions(schema_name(so.schema_id) + N'.' + so.name, 'OBJECT') f;

      
      insert #perms(login_name, type_desc, username, entity_name, subentity_name, permission_name)
      select @login_name, @type_desc, user_name(), f.entity_name, f.subentity_name, f.permission_name
      from sys.endpoints se
           cross apply fn_my_permissions(se.name, 'ENDPOINT') f;

      
      -- ... здесь выбираем разрешения на всякие другие интересующие объекты, типы которых описаны в справке по fn_my_permissions, аргумент 'securable_class'

      
      revert;
   end try
   begin catch
      print(@type_desc + N':  ' + @login_name + N' - ' + error_message());
   end catch;

   
   fetch next from logins_cur into @login_name, @type_desc;
end;

close logins_cur;

deallocate logins_cur;

select * from #perms;
7 авг 13, 10:29    [14673966]     Ответить | Цитировать Сообщить модератору
 Re: Аудит доступа  [new]
forrfor
Member

Откуда:
Сообщений: 49
Сергей Викт.
forrfor
Привет!

В базе накопилось много пользователей и объектов. Права назначены хаотично. Нужно провести аудит доступа и начать хочется с отчета что сейчас есть. Есть какие-то решения? Может, sql-запрос или тулза какая? Заходить в каждый объект, роль, пользователя в Management Studio и смотреть что у него там слишком трудоемко. Спасибо.

Доброе утро. А можно увидеть результат выполнения запроса
PRINT @@VERSION


Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64)
Dec 28 2012 20:23:12
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
7 авг 13, 16:22    [14676828]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить