检查登录是否已添加到用户定义的数据库角色中

时间:2016-09-29 07:05:18

标签: sql-server tsql

我正在制作一个脚本,将Login添加到用户定义的角色,将RoleNameLogin作为输入参数。

在添加之前检查是否已存在,但以下检查返回NULL。

USE [MYDatabase];
DECLARE @AddUser NVARCHAR(100) = 'test'
DECLARE @RoleName NVARCHAR(100) = 'MYDatabase_ReadOnly' -- User Defined DB ROle
IF EXISTS (Select name from sys.database_principals where name = @RoleName)
BEGIN
    SELECT IS_SRVROLEMEMBER (@RoleName, @AddUser)
    --Output: NULL
END

我可以在test中看到MYDatabase_ReadOnlysys.database_principals

我在这里缺少什么? (我在SQL Server 2014中这样做)

2 个答案:

答案 0 :(得分:0)

--Syntax: IS_SRVROLEMEMBER ( 'role' [ , 'login' ] )  
--Return value as NULL indicates role or login is not valid, or you do not have permission to view the role membership
--Return value as 0 indicates login is not a member of role.
--Return value as 1 indicates login is a member of role.

--I think you are using rong value for role paramenter.(Use role value from below)
--sysadmin,bcreator,bulkadmin,diskadmin,public,processadmin 

USE [MYDatabase];
DECLARE @database_principals_name NVARCHAR(100) = 'db_owner'
DECLARE @RoleName NVARCHAR(100) = 'sysadmin' -- User Defined DB ROle
IF EXISTS (Select name from sys.database_principals where name = @database_principals_name)
BEGIN
    select IS_SRVROLEMEMBER ('sysadmin')
    --Output: NULL
END

答案 1 :(得分:0)

它必须是IS_ROLEMEMBER(@RoleName, @AddUser),因为它正在检查数据库角色而不是IS_SRVROLEMEMBER (@RoleName, @AddUser)