我们在生产中使用MS SQL Server 2012和MS AD。
让我简单解释一下我们分配用户权限的概念是什么。
对于对某个应用程序有一定访问权限的特定用户组,我们创建AD组并为其分配AD用户。由于此应用程序需要访问其他数据库中的数据,因此我们也将该组添加到该数据库,并为所需对象(特定对象或模式)设置访问/执行权限。
由于某些人使用其他应用程序和数据库,因此它们也会添加到其他AD组中。毫不奇怪,这些组也需要访问某些对象到第二个数据库。
因此,当某些用户位于几个不同的AD组中,并且对DB中的相同对象具有不同的访问权限时,我们就会遇到这种情况。这导致很多"奇怪的"一些用户被拒绝访问DB中的对象时的行为。
我的问题是:
有没有办法找出哪些用户(通过哪个AD组)某些用户对从应用程序触发的某些sql查询进行访问/拒绝?
有人可以解释sql server如何处理这种环境中的权限吗?
我打开任何关于如何完全处理/设置访问的建议,但不涉及重新编程应用程序(仅限DBA站点)。
谢谢。
答案 0 :(得分:0)
假设您是管理员,您可以在冒充有问题的用户时查看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;