【问题标题】:Check if role consists of particular user in DB?检查角色是否由数据库中的特定用户组成?
【发布时间】:2011-01-12 17:02:38
【问题描述】:

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

例如 如果用户存在于角色中 开始 从角色中删除用户 结束

【问题讨论】:

    标签: sql sql-server database roles


    【解决方案1】:

    您可以将存储过程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 并没有什么坏处。

    【讨论】:

      【解决方案2】:

      这就是我所做的:

      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;
      

      【讨论】:

        猜你喜欢
        • 2010-12-22
        • 2019-06-16
        • 2021-10-10
        • 1970-01-01
        • 2020-07-08
        • 1970-01-01
        • 2023-03-03
        • 2011-01-12
        相关资源
        最近更新 更多