如何使用“Windows登录”为某个用户获取等效的IS_MEMBER

时间:2013-07-24 13:51:17

标签: sql sql-server-2008

我需要检查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身份验证登录用户名)是否来自哪个群组。他只是一个普通用户,因此要求他运行我的查询几乎是不可能的。感谢。

1 个答案:

答案 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