我需要一个T-SQL语句来检查用户是否是SQL Server中数据库角色的成员。具体来说,我需要知道用户是否是dbo角色的成员,因为那时我不必向该用户授予额外的权限。
如果我尝试在用户使用dbo时添加其他权限,则会失败,并且我的脚本会失败...
答案 0 :(得分:11)
IF IS_ROLEMEMBER ('db_owner') = 1
BEGIN
PRINT 'Is owner'
END
或者,如果查询其他用户:
IF IS_ROLEMEMBER ('db_owner','other user') = 1
BEGIN
PRINT 'Is owner'
END
答案 1 :(得分:6)
以下是IS_MEMBER
功能的MSDN页面中的示例:
-- Test membership in db_owner and print appropriate message.
IF IS_MEMBER ('db_owner') = 1
PRINT 'Current user is a member of the db_owner role'
ELSE IF IS_MEMBER ('db_owner') = 0
PRINT 'Current user is NOT a member of the db_owner role'
ELSE IF IS_MEMBER ('db_owner') IS NULL
PRINT 'ERROR: Invalid group / role specified'
答案 2 :(得分:3)
这就是我最终做的事情:(根据评论进行编辑)
DECLARE @ISSYSADMIN INT
SET @ISSYSADMIN = (SELECT COUNT(1)
FROM sys.syslogins
WHERE sysadmin = 1 AND loginname = '$(ContentAccount)')
$(ContentAccount)当然是一个具有用户域和名称的参数化!
这解决了我的问题,因为当我们部署新数据库时,我们手动分配权限。但是在我们尝试添加的用户已经是sysadmin的开发环境中,它们会失败。因此,如果我们检查足以涵盖开发服务器方案的sysadmin成员资格。
然后我这样做来检查会员资格:
IF (@ISSYSADMIN = 0)
BEGIN
-- Add authority
END
答案 3 :(得分:2)
IS_SRVROLEMEMBER
是您想要的功能。
IF IS_SRVROLEMEMBER ('sysadmin','myuser') = 1 PRINT 'Is SysAdmin'
IF IS_SRVROLEMEMBER ('serveradmin','myuser') = 1 PRINT 'Is ServerAdmin'