Права пользователя в БД 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;