Предполагается, что вы хотя бы в 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 на желаемом защищаемом.