我需要一个T-SQL语句来检查用户是否是SQL Server中数据库角色的成员.具体来说,我需要知道用户是否是dbo角色的成员,因为那样我就不必向该用户授予额外的权限.
如果我尝试在用户使用dbo时添加其他权限,则会失败,并且我的脚本会失败...
Dam*_*ver 13
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)
以下是该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)
这就是我最终所做的:(根据评论进行编辑)
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)