检查用户是否是SQL Server中dbo角色的成员

时间:2012-10-30 14:46:50

标签: sql-server tsql

我需要一个T-SQL语句来检查用户是否是SQL Server中数据库角色的成员。具体来说,我需要知道用户是否是dbo角色的成员,因为那时我不必向该用户授予额外的权限。

如果我尝试在用户使用dbo时添加其他权限,则会失败,并且我的脚本会失败...

4 个答案:

答案 0 :(得分:11)

IS_ROLEMEMBER

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'

Reference