我需要一条 T-SQL 语句来检查用户是否是 SQL Server 中数据库角色的成员。具体来说,我需要知道用户是否是 dbo 角色的成员,因为这样我就不必向该用户授予额外的权限。
如果我在用户是 dbo 时尝试添加额外的权限,它会失败,并且我的脚本也会失败......
我需要一条 T-SQL 语句来检查用户是否是 SQL Server 中数据库角色的成员。具体来说,我需要知道用户是否是 dbo 角色的成员,因为这样我就不必向该用户授予额外的权限。
如果我在用户是 dbo 时尝试添加额外的权限,它会失败,并且我的脚本也会失败......
IF IS_ROLEMEMBER ('db_owner') = 1
BEGIN
PRINT 'Is owner'
END
或者,如果查询不同的用户:
IF IS_ROLEMEMBER ('db_owner','other user') = 1
BEGIN
PRINT 'Is owner'
END
以下是 MSDN 页面上有关该IS_MEMBER
功能的示例:
-- 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'
这就是我最终做的事情:(根据评论进行编辑)
DECLARE @ISSYSADMIN INT
SET @ISSYSADMIN = (SELECT COUNT(1)
FROM sys.syslogins
WHERE sysadmin = 1 AND loginname = '$(ContentAccount)')
$(ContentAccount) 当然是具有用户域和名称的参数化!
这解决了我的问题,因为当我们部署新数据库时,我们手动分配权限。但是在我们尝试添加的用户已经是 sysadmin 的开发环境中,它们会失败。因此,如果我们检查足以涵盖开发服务器场景的系统管理员成员资格。
然后我这样做是为了检查成员资格:
IF (@ISSYSADMIN = 0)
BEGIN
-- Add authority
END
IS_SRVROLEMEMBER
是你想要的功能。
IF IS_SRVROLEMEMBER ('sysadmin','myuser') = 1 PRINT 'Is SysAdmin'
IF IS_SRVROLEMEMBER ('serveradmin','myuser') = 1 PRINT 'Is ServerAdmin'