我正在制作一个脚本,将Login添加到用户定义的角色,将RoleName
和Login
作为输入参数。
在添加之前检查是否已存在,但以下检查返回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_ReadOnly
和sys.database_principals
。
我在这里缺少什么? (我在SQL Server 2014中这样做)
答案 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)
。