TSQL для получения разрешений пользователя без подражания - PullRequest
2 голосов
/ 15 августа 2011

Можно ли проверить, есть ли у пользователя права на изменение какого-либо объекта на сервере без выполнения запроса от имени этого пользователя?

Мне нужно создать отчет об аудите входа в систему, в котором указано время входа в систему для учетных записей, имеющих доступ для вставки / обновления чего-либо на сервере (т. Е. В любой базе данных на сервере)

Это также не должно влиять на производительность (если возможно) или оказывать наименьшее влияние.

1 Ответ

1 голос
/ 15 августа 2011

С этой статьи :

select sys.schemas.name 'Schema', sys.objects.name Object, sys.database_principals.name username, sys.database_permissions.type permissions_type,
     sys.database_permissions.permission_name, 
     sys.database_permissions.state permission_state,
     sys.database_permissions.state_desc,
     state_desc + ' ' + permission_name + ' on ['+ sys.schemas.name + '].[' + sys.objects.name + '] to [' + sys.database_principals.name + ']' COLLATE LATIN1_General_CI_AS
 from sys.database_permissions
 join sys.objects on sys.database_permissions.major_id = 
     sys.objects.object_id
 join sys.schemas on sys.objects.schema_id = sys.schemas.schema_id
 join sys.database_principals on sys.database_permissions.grantee_principal_id = 
     sys.database_principals.principal_id
 order by 1, 2, 3, 5

Вы хотели бы отфильтровать по username. И имейте в виду, что это показывает только явно определенные разрешения (и запрещающие правила), а не эффективные разрешения.

...