Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 检查角色是否由数据库中的特定用户组成?_Sql_Sql Server_Database_Roles - Fatal编程技术网

Sql 检查角色是否由数据库中的特定用户组成?

Sql 检查角色是否由数据库中的特定用户组成?,sql,sql-server,database,roles,Sql,Sql Server,Database,Roles,我正在尝试从多个数据库中的角色删除用户。不确定用户是否可以在所有数据库中担任相同的角色。如何检查用户是否在角色中,以及是否在角色中删除用户 e、 g。 如果角色中存在用户 开始 从角色中删除用户 结束您可以将存储过程sp_helpuser的输出存储在一个表变量中,并查询: declare @groups table ( UserName varchar(max), GroupName varchar(max), LoginName varchar(max), Re

我正在尝试从多个数据库中的角色删除用户。不确定用户是否可以在所有数据库中担任相同的角色。如何检查用户是否在角色中,以及是否在角色中删除用户

e、 g。 如果角色中存在用户 开始 从角色中删除用户
结束

您可以将存储过程sp_helpuser的输出存储在一个表变量中,并查询:

declare @groups table (
    UserName varchar(max),
    GroupName varchar(max),
    LoginName varchar(max),
    RefDBName varchar(max),
    DefSchemaName varchar(max),
    UserId int,
    SID varbinary(max)
)   

insert into @groups exec sp_helpuser 'TheUser'

if exists (select * from @groups where GroupName = 'TheRole')
    begin
    print 'Removing user from role...'
    exec sp_droprolemember 'TheRole', 'TheUser'
    end

但是,无论用户是否担任该角色,只要执行sp_droprolemember都没有坏处。

您可以将存储过程sp_helpuser的输出存储在一个表变量中,并查询:

declare @groups table (
    UserName varchar(max),
    GroupName varchar(max),
    LoginName varchar(max),
    RefDBName varchar(max),
    DefSchemaName varchar(max),
    UserId int,
    SID varbinary(max)
)   

insert into @groups exec sp_helpuser 'TheUser'

if exists (select * from @groups where GroupName = 'TheRole')
    begin
    print 'Removing user from role...'
    exec sp_droprolemember 'TheRole', 'TheUser'
    end
但是,不管用户是否担任该角色,只执行sp_droprolemember并没有什么坏处。

我就是这么做的:

IF EXISTS(SELECT *
          FROM sys.database_role_members AS RM
          JOIN sys.database_principals AS U
            ON RM.member_principal_id = U.principal_id
          JOIN sys.database_principals AS R
            ON RM.role_principal_id = R.principal_id
          WHERE U.name = @username
            AND R.name = @rolename)
EXEC sp_droprolemember @rolename, @username;
这就是我所做的:

IF EXISTS(SELECT *
          FROM sys.database_role_members AS RM
          JOIN sys.database_principals AS U
            ON RM.member_principal_id = U.principal_id
          JOIN sys.database_principals AS R
            ON RM.role_principal_id = R.principal_id
          WHERE U.name = @username
            AND R.name = @rolename)
EXEC sp_droprolemember @rolename, @username;