права доступа к объекту -TSQL - PullRequest
4 голосов
/ 21 июля 2009

Мне нужно следующее:

  1. Проверьте, предоставлено ли Public или guest какое-либо разрешение на объект (роль базы данных и роль сервера)
  2. Проверьте, есть ли у пользователя права доступа к объекту, а не к ролям.
  3. Проверьте, имеет ли пользователь with grant привилегии для объекта
  4. Проверьте, кто имеет доступ к расширенным хранимым процедурам (которые я получаю из select name from sysobjects where xtype='X')

Я думаю, что они все взаимосвязаны (но не знают как).

Может ли один совет по этому поводу?
Или направить меня с полезными таблицами?

Любая помощь будет принята с благодарностью.

Ответы [ 4 ]

5 голосов
/ 21 июля 2009

Как это:

Create View vwObjectPermissions AS
select schema_name(o.schema_id) as [Schema_Name]
, o.name as [object_name]
, u.name as [principal_name]
, u.type_desc as [principal_type]
, r.minor_id, r.permission_name, r.state_desc
, o.schema_id, o.principal_id as [alt_owner], o.type_desc
 from sys.database_permissions r
  Left Join sys.database_Principals u
    ON r.grantee_principal_id = u.principal_id
  Left Join sys.all_objects o
    ON o.object_id = r.major_id
 Where class_desc NOT IN ('database')
GO

--1. Check if Public or guest is granted any permission on an object (database role and server role)
Select * from  vwObjectPermissions
 Where principal_name IN ('Public','Guest')

--2. Check if any user is granted permissions on an object rather than roles.
Select * from vwObjectPermissions
 Where principal_type NOT LIKE '%ROLE%'

--3. Check if a user has "with grant" previliges on an object
Select * from vwObjectPermissions
 Where state_desc = 'WITH GRANT'        --check the spelling on this one

--4. Check who has access to extended stored procedures (which I get from select name from sysobjects where xtype='X')
Select * from  vwObjectPermissions
 Where type_desc LIKE '%X%Proc%'

GO
drop view vwObjectPermissions;
1 голос
/ 21 июля 2009

IN MSSQL 2005/2008 - используя SELECT CURRENT_USER вы можете получить текущее имя пользователя - используя sp_helpuser вы можете получить текущие роли пользователя - используя sys.obecjts, sys.database_principals и sys.database_permissions, вы можете получить привилегии пользователей.

1 голос
/ 21 июля 2009

Предполагается, что вы хотя бы в SQL 2005 ...

Соответствующие метаданные хранятся в sys.database_permissions для защищаемых баз данных и в sys.server_permissions дляУровень безопасности на сервере.Список участников базы данных (пользователей и ролей) можно получить из sys.database_principals , участников сервера (регистрирует роли сервера) из sys.server_principals .

ThisВы получите список явных разрешений, но вам необходимо принять во внимание и неявные разрешения, которые не объявлены.Определенные группы имеют неявное разрешение.Чтобы еще больше усложнить ситуацию, вам также придется иметь дело с членством в группах Windows, которое не объявляется в каком-либо представлении SQL, но учитывается при выполнении проверок доступа.Наконец, правила доступа довольно сложны: принципал может иметь привилегию через явный GRANT, через членство в группе, которой предоставлена ​​привилегия, но любой DENY превосходит все GRANT, и это необходимо учитывать, за исключением защищаемыхправо собственности, которое превосходит ДЕНИ.Замедление на торте - членство sysadmin, которое превосходит все правила привилегий: sysadmin имеет все привилегии по определению.

Вы можете проверить любую привилегию на любом защищаемом для большинства принципалов, выдав себя за субъекта с помощью EXECUTE AS и проверяем вывод fn_my_permissions на желаемом защищаемом.

1 голос
/ 21 июля 2009

Вот хороший процесс для # 3 от SQL Server Central.com

http://www.sqlservercentral.com/scripts/Permissions/64309/

Я думаю, вы можете изменить его на # 4

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...