4

我需要检查 Windows Auth 用户所在的数据库角色。我们只使用 Windows Auth Login 来验证某些用户的访问权限。对于没有正确可访问性的成员,我们有一些问题。我需要确定原因是在 sql 角色成员中还是在我们的程序本身中。谢谢。

我们的程序看起来是通过运行具有多个 IF 的 SP 来检查用户成员是否是

IF IS_MEMBER('Administration') = 1
SELECT 'Admin'

IF IS_MEMBER('Public') = 1
SELECT 'Public'

有点像那样。

我需要检查用户的登录是否来自哪个成员。我知道他的登录用户,但不知道如何测试它。我认为我们使用的是 SQL SERVER 2008 或更高版本。


如果我使用 Windows Auth Login 运行此查询。

SELECT IS_MEMBER('Public')

我得到了 result = 1 这意味着我在 Roles\Database Roles\Public

我们有特定的数据库角色,但我无法看到我来自哪个组,直到我执行上面的查询并看到“1”作为结果。

我需要做同样的事情并检查某个用户(使用 Windows Auth 登录用户名)是否来自哪个组。他只是一个普通用户,所以让他运行我的查询几乎是不可能的。谢谢。

4

1 回答 1

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
于 2013-07-24T14:04:38.277 回答