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

Mat*_*erg 5 t-sql sql-server

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

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

Dam*_*ver 13

IS_ROLEMEMBER

IF IS_ROLEMEMBER ('db_owner') = 1
BEGIN
    PRINT 'Is owner'
END
Run Code Online (Sandbox Code Playgroud)

或者,如果查询其他用户:

IF IS_ROLEMEMBER ('db_owner','other user') = 1
BEGIN
    PRINT 'Is owner'
END
Run Code Online (Sandbox Code Playgroud)


Bri*_*dge 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'
Run Code Online (Sandbox Code Playgroud)


Mat*_*erg 3

这就是我最终所做的:(根据评论进行编辑)

DECLARE @ISSYSADMIN INT
SET @ISSYSADMIN = (SELECT COUNT(1) 
                   FROM sys.syslogins 
                   WHERE sysadmin = 1 AND loginname = '$(ContentAccount)')
Run Code Online (Sandbox Code Playgroud)

$(ContentAccount) 当然是一个参数化,其中包含用户域和名称!

这解决了我的问题,因为当我们部署新数据库时,我们正在手动分配权限。但在我们尝试添加的用户已经是系统管理员的开发环境中,它们会失败。因此,如果我们检查系统管理员成员身份,就足以涵盖开发服务器场景。

然后我这样做来检查成员资格:

IF (@ISSYSADMIN = 0)
BEGIN
  -- Add authority
END
Run Code Online (Sandbox Code Playgroud)