ストアドプロシージャを作成してカスタムスキーマにバインドするためのSQL Serverログイン権限を付与しようとしています。この場合、IC
というスキーマを作成しました。次に、ストアドプロシージャの実行権限を持つサービスアカウントがスキーマに追加されます。
私の質問は、このSQL Serverログインに、ICにバインドされた新しいストアドプロシージャを作成する権限をどのように付与するのですか?
私はもう試した GRANT CREATE ON SCHEMA::IC TO [username];
だけが得ます
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'CREATE'.
助言がありますか?
スキーマに対するアクセス許可を付与するだけでは、プロシージャを作成する機能を1つのスキーマのみに変更することはできません。 (ユーザーに他の権限がないと仮定します。)
なぜ?
ユーザーには、データベースにオブジェクトを作成する権限が必要です。この場合は、この手順です。
あなたにできることは、ユーザーにCREATE PROCEDURE
権限を付与してから、スキーマの所有者をそのユーザーに変更するか(より安全、詳細については下記を参照)、そのユーザーに 'IC' SCHEMA
へのアクセス許可を付与します。
付与のみCREATE PROCEDURE
は、ユーザーがdboなどのスキーマにプロシージャを作成することを許可しません。
ログイン、対応するユーザー、およびICスキーマを作成します
USE [master]
GO
CREATE LOGIN [TestIC] WITH PASSWORD=N'Test', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF;
GO
USE [test]
GO
CREATE USER [TestIC] FOR LOGIN [TestIC];
GO
CREATE SCHEMA IC;
Grant Create procedure to the user
GRANT CREATE PROCEDURE TO [TestIC];
スキーマの所有者を変更する(安全なオプション)
ALTER AUTHORIZATION ON SCHEMA::IC TO [TestIC];
またはスキーマへのアクセスをユーザーに許可します
GRANT
ALTER
ON SCHEMA::IC
TO [TestIC] ;
スキーマに対する権限の付与に関連するリスク
ユーザーに別のユーザーのスキーマを変更する権限を付与すると、そのユーザーは、そのスキーマの所有者が所有する任意のテーブルの行をSELECT、INSERT、UPDATE、およびDELETEできるようになります。これは「所有権の連鎖」と呼ばれ、ビューまたはストアドプロシージャに対するアクセス許可を持つユーザーは、基になるテーブルに対するアクセス許可を付与される必要がないため、ビューとストアドプロシージャがセキュリティを制御するための本当に簡単な方法になります。ビュー/プロシージャの所有者はテーブルと同じです。
引用の起源について@ DavidBrowne-Microsoftの回答を確認し、スキーマの変更権限を付与する際の「所有権の連鎖」のセキュリティリスクに関する詳細情報を入手してください。
テスト
EXECUTE AS LOGIN = 'TestIC';
CREATE PROCEDURE IC.test
as
select * from sys.databases;
結果:
コマンドは正常に完了しました。
これは失敗します
CREATE PROCEDURE dbo.test
as
select * from sys.databases;
メッセージ2760、レベル16、状態1、手順テスト、行1 [バッチ開始行35]指定されたスキーマ名 "dbo"が存在しないか、それを使用する権限がありません。
なりすましを元に戻す
REVERT;
あなたはALTERパーミッションを与えることを試みることができます:
GRANT ALTER ON SCHEMA::IC TO [username];
ドキュメントから:
スキーマに対するALTER権限を持つユーザーは、所有権の連鎖を使用して、そのユーザーが明示的にアクセスを拒否されているセキュリティ保護可能なファイルを含む、他のスキーマのセキュリティ保護可能なファイルにアクセスできます。これは、所有権の継承が、参照されるオブジェクトを所有するプリンシパルによって所有されている場合、参照されるオブジェクトのアクセス権チェックをバイパスするためです。スキーマに対するALTER権限を持つユーザーは、スキーマの所有者が所有するプロシージャ、シノニム、およびビューを作成できます。これらのオブジェクトは、スキーマの所有者が所有する他のスキーマの情報に(所有権の連鎖を介して)アクセスできます。スキーマの所有者が他のスキーマも所有している場合は、可能であれば、スキーマに対するALTER権限を付与しないでください。