Проверить, состоит ли роль конкретного пользователя в БД? - PullRequest
1 голос
/ 03 февраля 2010

Я пытаюсь удалить пользователя из роли в нескольких базах данных.Не уверен, что пользователь может играть одинаковую роль во всех базах данных.Как я могу проверить, находится ли пользователь в роли и удаляется ли он из роли.

например, ЕСЛИ пользователь существует в роли, НАЧИНАЕТ удалить пользователя из роли END

Ответы [ 2 ]

3 голосов
/ 03 февраля 2010

Вот что я сделал:

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;
2 голосов
/ 03 февраля 2010

Вы можете сохранить вывод хранимой процедуры 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 не повредит, независимо от того, находится ли пользователь в роли.

...