Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有内部角色的SQL Server用户角色_Sql_Sql Server_Tsql_Roles_Members - Fatal编程技术网

具有内部角色的SQL Server用户角色

具有内部角色的SQL Server用户角色,sql,sql-server,tsql,roles,members,Sql,Sql Server,Tsql,Roles,Members,我知道标题可能有点混乱,但那是我能想到的最好的。 所以我的问题是:我有一个数据库,它有许多角色,其中一些角色作为角色成员有其他角色,所以当一个用户被添加到一个角色中时,它也会自动将该用户添加到其他角色中 例如,在我的数据库中,如果我运行SQL: exec sp_helprolember op_ConfigDefault——这将为我提供op_ConfigDefault角色的所有成员。在这些角色中,一些成员是真正的角色。我做了一些打印屏幕以使其更清晰 在蓝色的squere中,我的成员是角色,在红场

我知道标题可能有点混乱,但那是我能想到的最好的。 所以我的问题是:我有一个数据库,它有许多角色,其中一些角色作为角色成员有其他角色,所以当一个用户被添加到一个角色中时,它也会自动将该用户添加到其他角色中

例如,在我的数据库中,如果我运行SQL:

exec sp_helprolember op_ConfigDefault
——这将为我提供op_ConfigDefault角色的所有成员。在这些角色中,一些成员是真正的角色。我做了一些打印屏幕以使其更清晰

在蓝色的squere中,我的成员是角色,在红场中是普通用户

在这里你可以看到上面的“成员”实际上是角色


我现在的问题是,有没有一种方法可以构建一个T-SQL,这样我就只能从一个角色中获取同样是角色的成员?

我已经设法找到了解决方案

SELECT DbRole = g.NAME,
    MemberName = u.NAME,
    MemberSID = u.sid
FROM sys.database_principals u,
    sys.database_principals g,
    sys.database_role_members m
WHERE g.NAME = /* add role name here*/
    AND g.principal_id = m.role_principal_id
    AND u.principal_id = m.member_principal_id
    AND u.NAME IN (
        SELECT NAME
        FROM sys.database_principals
        WHERE type = 'R'
        )
ORDER BY 1, 2