Все немного сложнее на самом деле. Действующие разрешения представляют собой комбинацию внутренних разрешений базы данных (запрашиваемых как запрос Денни, показанный выше с помощью doza) и членство в группе Windows. Позже, к сожалению, эта информация хранится вне SQL в схеме AD, поэтому вы не можете запросить ее.
Таким образом, если ваша цель состоит в том, чтобы отобразить 'Доступ к таблице X предоставляется домену \ someuser и domain \ somegroup и запрещен для домена \ someothergroup', тогда вы можете использовать метаданные каталога и запросить их, как показано в посте Дозы.
Однако, если ваша цель - ответить «Имеет ли пользовательский домен \ someuser доступ к таблице X?» Вы не можете получить ответ из запроса выше. Это верно, несмотря на то, что вы видите запись о том, что домен \ someuser имеет доступ, вы не можете ответить, если он имеет эффективный доступ. Помните, что одно запрещение превосходит все права, и если домен \ пользователь является членом группы домен \ someothergroup, тогда домену \ someuser фактически отказано в доступе.
Чтобы ответить на следующий вопрос, вы должны использовать другой механизм, а именно вы должны выдать себя за пользователя на уровне SQL и проверить разрешение с помощью HAS_PERM_BY_NAME :
EXECUTE AS USER = 'domain\someuser';
SELECT HAS_PERMS_BY_NAME('X','TABLE','SELECT');
REVERT;
Стоит отметить, что на первый вопрос может ответить любой, имеющий права просмотра в каталогах безопасности, в то время как последнему требуется разрешение для олицетворения, гораздо более мощная привилегия.