7

Windows ユーザーのコンテキストで実行される Powershell スクリプトがあります。このユーザーは、sysadmin サーバー ロールのメンバーである SQL 2012 インスタンスにログインしています。

スクリプトで、SQL インスタンス (対応する Windows ユーザーも持つ) に別のログインを sysadmin サーバー ロールに追加する必要があります。

Management Studio (SA として接続) でこれを試すために、次のスクリプトを使用しています。

execute as user = 'domain\currentsysadmin'

IF IS_SRVROLEMEMBER('sysadmin', 'domain\futuresysadmin') != 1
    ALTER SERVER ROLE [sysadmin] ADD MEMBER [domain\futuresysadmin]

revert

ここには2つの問題があります:

  1. ここに表示されているようにスクリプトを実行すると、IS_SRVROLEMEMBER への呼び出しは期待どおり 0 を返しますが、domain\currentsysadmin ログインが sysadmin のメンバーであっても、ALTER SERVER ROLE への呼び出しは次を返します。

    メッセージ 15151、レベル 16、状態 1、行 8 サーバー ロール 'sysadmin' は、存在しないか権限がないため、変更できません。

  2. これを SA のコンテキストで EXECUTE AS ステートメントなしで実行すると、ALTER SERVER ROLE ステートメントは正常に実行されたように見えますが、domain\futuresysadmin ログインを確認すると、まだ sysadmin ロールのメンバーではありません。

domain\futuresystem ログインを sysadmin サーバー ロールに追加するにはどうすればよいですか?

4

1 に答える 1

4

使用sp_addsrvrolemember:

EXEC master..sp_addsrvrolemember @loginame = N'domain\futuresysadmin', @rolename = N'sysadmin'

更新: ユーザー コンテキストの切り替えは、sysadmin などのサーバーの役割を継承しません。ドキュメントを読むと、「ユーザートークンまたはロールメンバーシップを介してアイデンティティに明示的に付与されたサーバーレベルのアクセス許可は受け入れられません。」ユーザー コンテキストを切り替えると、ユーザーは sysadmin を別のユーザーに付与する権限を失います。

于 2012-12-10T22:52:15.050 に答える