Mar*_*lli 13 sql-server permissions sql-server-2008-r2 active-directory sql-server-2014
我不确定我是否为这个问题选择了正确的标题。我真正想要的是,给定一个单独的 Windows AD 用户,我想找出可以访问此服务器中特定数据库的 Windows AD 组(登录名)的列表
当我运行以下查询时
select
name,
principal_id,
type,
type_desc,
default_schema_name,
create_date,
modify_date,
owning_principal_id,
sid,
is_fixed_role
from sys.database_principals
Run Code Online (Sandbox Code Playgroud)
在我的服务器中
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 2011 年 6 月 17 日 00:54:03 版权所有 (c) Windows NT 6.1(内部版本 7601:Service Pack 1)上的 Microsoft Corporation 标准版(64 位)
我得到以下结果(部分列表):
我需要知道特定登录名的所有权限。此登录名可以通过 AD 组访问我的服务器/数据库。
1) 从上面的列表中,我的登录名属于哪些 AD 组?
我一直在下面这样做,但我真的很想找出该用户所属的 AD 组(根据上图可以访问该服务器)的列表。
首先,我以相关用户身份执行
EXECUTE AS LOGIN='mycompany\HThorne'
DECLARE @User VARCHAR(20)
SELECT @USER = SUBSTRING(SUSER_SNAME(),
CHARINDEX('\', SUSER_SNAME()) + 1, LEN(SUSER_SNAME()))
Run Code Online (Sandbox Code Playgroud)
我确保我拥有正确的凭据
SELECT @USER
, SUSER_SNAME()
,SYSTEM_USER
, USER_NAME()
, CURRENT_USER
, ORIGINAL_LOGIN()
, USER
,SESSION_USER
Run Code Online (Sandbox Code Playgroud)
我转到特定数据库并使用 fn_my_permissions - 以相关用户身份运行
use WebDataImportStage
go
SELECT * FROM fn_my_permissions (NULL, 'DATABASE');
GO
REVERT
Run Code Online (Sandbox Code Playgroud)
这给了我下面的结果:
小智 18
我的登录名属于上面列表中的哪些 AD 组?
您需要做的就是执行以下命令:
EXEC xp_logininfo 'domain\useraccount','all';
GO
Run Code Online (Sandbox Code Playgroud)
如果该帐户无法通过该服务器上的任何组进行访问,并且是域中的合法帐户,则不会返回任何记录。如果发现用户具有权限,您可以通过检查permission path. 这将返回domain\groupname授予域用户访问权限的组。
要回答您的具体问题,我发现获取用户所属的 AD 组列表(来自 SQL Server)的最简单方法是使用sys.login_token或sys.user_token。
您必须EXECUTE AS LOGIN =像上面一样使用,但是一旦您模拟登录名,您就可以查询sys.login_token以获取登录名所属的组列表。这包括任何服务器级角色和所有 AD 组。有一个principal_id 列链接到sys.server_principals系统视图。它将为所有服务器角色以及在 中具有条目的 AD 组填写sys.server_principals。
要获取更多特定于数据库的信息,您可以转到您感兴趣的数据库并使用它sys.user_token来获取与该数据库关联的角色/AD 组的列表。在这种情况下, principal_id 与 相关联sys.database_principals。
| 归档时间: |
|
| 查看次数: |
45316 次 |
| 最近记录: |