Права пользователя в БД sql server, назначенные из групп AD

У нас есть MS SQL Server 2012 в производственном использовании и MS AD.

Позвольте мне вкратце объяснить, на что похожа наша концепция назначения прав пользователей.

Для определенной группы пользователей, которая имеет некоторый доступ к определенному приложению, мы создаем группу AD и назначаем ей пользователей AD. Поскольку этому приложению требуется доступ к данным в другой БД, мы также добавляем эту группу в эту БД и устанавливаем права доступа / выполнения к нужным объектам (конкретному объекту или схемам).

Поскольку некоторые люди используют другие приложения и базы данных, они также добавляются в другие группы AD. Эти группы, неудивительно, также нуждаются в доступе к некоторым объектам во второй базе данных.

Таким образом, мы имеем ситуацию, когда определенные пользователи находятся в нескольких разных группах AD с разным доступом к одним и тем же объектам в БД. Это вызывает много "странных" поведений, когда внезапно некоторые пользователи получают отказ в доступе к объектам в БД.

Мои вопросы:

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

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

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

Спасибо.

1 ответ

Предполагая, что вы администратор, вы можете посмотреть на sys.login_token, sys.user_token, а также sys.fn_my_permissions() в то же время выдавая себя за пользователя, чтобы получить представление. Что-то вроде:

execute as login='yourDom\User1';
select * from sys.login_token;
select * from sys.user_token;
select * from sys.fn_my_permission('dbo.someObject', 'OBJECT');
revert;