我需要检查Windows Auth用户所在的数据库角色。我们仅使用Windows身份验证登录来验证某些用户的可访问权限。对于没有正确访问权限的成员,我们遇到了一些问题。我需要检查原因是否是sql角色成员身份或我们的程序本身。感谢。
我们的程序看起来是通过运行带有多个IF的SP来检查用户成员是否
IF IS_MEMBER('Administration') = 1
SELECT 'Admin'
IF IS_MEMBER('Public') = 1
SELECT 'Public'
有点像那样。
我需要检查用户登录的成员是否来自哪个成员。我知道他的登录用户但不知道如何测试它。我想我们正在使用SQL SERVER 2008或更高版本。
如果我使用Windows身份验证登录运行此查询。
SELECT IS_MEMBER('Public')
我得到了结果= 1,这意味着我在Roles \ Database Roles \ Public
下我们有一定的数据库角色,但在上面的查询之前我看不到我来自哪个组,结果看到了“1”。
我需要做同样的事情并检查某个用户(使用Windows身份验证登录用户名)是否来自哪个群组。他只是一个普通用户,因此要求他运行我的查询几乎是不可能的。感谢。
答案 0 :(得分:4)
对于服务器角色(您原来的问题似乎是您所追求的):
SELECT r.name
FROM sys.server_role_members AS m
INNER JOIN sys.server_principals AS l
ON m.member_principal_id = l.principal_id
INNER JOIN sys.server_principals AS r
ON m.role_principal_id = r.principal_id
WHERE l.name = N'DOMAIN\Username';
-----------------^^^^^^^^^^^^^^^ replace this part with your domain\user
对于数据库角色:
SELECT r.name
FROM sys.database_role_members AS m
INNER JOIN sys.database_principals AS dp
ON m.member_principal_id = dp.principal_id
INNER JOIN sys.server_principals AS l
ON dp.[sid] = l.[sid]
INNER JOIN sys.database_principals AS r
ON m.role_principal_id = r.principal_id
WHERE l.name = N'DOMAIN\Username';
-----------------^^^^^^^^^^^^^^^ replace this part with your domain\user