ユーザーが SQL Server のデータベース ロールのメンバーであるかどうかを確認するには、T-SQL ステートメントが必要です。具体的には、ユーザーが dbo ロールのメンバーであるかどうかを知る必要があります。これは、そのユーザーに追加の権限を付与する必要がないためです。
ユーザーが dbo のときに追加の権限を追加しようとすると失敗し、スクリプトが失敗します...
ユーザーが SQL Server のデータベース ロールのメンバーであるかどうかを確認するには、T-SQL ステートメントが必要です。具体的には、ユーザーが 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
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'
これが私がやったことです:(コメントに基づいて編集)
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
IS_SRVROLEMEMBER
欲しい機能です。
IF IS_SRVROLEMEMBER ('sysadmin','myuser') = 1 PRINT 'Is SysAdmin'
IF IS_SRVROLEMEMBER ('serveradmin','myuser') = 1 PRINT 'Is ServerAdmin'