GRANT (Transact-SQL)
セキュリティ保護可能なリソースに対する権限をプリンシパルに許可します。一般的な考え方としては、GRANT <権限> ON <オブジェクト> TO <ユーザー、ログイン、またはグループ> という形になります。権限の概要については、「権限 (データベース エンジン)」を参照してください。
構文
Simplified syntax for GRANT
GRANT { ALL [ PRIVILEGES ] }
| permission [ ( column [ ,...n ] ) ] [ ,...n ]
[ ON [ class :: ] securable ] TO principal [ ,...n ]
[ WITH GRANT OPTION ] [ AS principal ]
引数
ALL
このオプションは旧バージョンとの互換性のためだけに保持されており、使用は推奨されません。実際にはすべての権限が許可されるわけではありません。ALL を指定すると、次の権限が許可されます。セキュリティ保護可能なリソースがデータベースの場合、BACKUP DATABASE、BACKUP LOG、CREATE DATABASE、CREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE RULE、CREATE TABLE、CREATE VIEW。
セキュリティ保護可能なリソースがスカラー関数の場合、EXECUTE および REFERENCES。
セキュリティ保護可能なリソースがテーブル値関数の場合、DELETE、INSERT、REFERENCES、SELECT、UPDATE。
セキュリティ保護可能なリソースがストアド プロシージャの場合、EXECUTE。
セキュリティ保護可能なリソースがテーブルの場合、DELETE、INSERT、REFERENCES、SELECT、UPDATE。
セキュリティ保護可能なリソースがビューの場合、DELETE、INSERT、REFERENCES、SELECT、UPDATE。
PRIVILEGES
ISO 準拠のために用意されています。ALL の動作は変更されません。permission
権限の名前を指定します。権限とセキュリティ保護可能なリソースの有効な組み合わせについては、後のトピックを参照してください。column
権限を許可するテーブルの列の名前を指定します。かっこ "()" で囲む必要があります。class
権限を許可するセキュリティ保護可能なリソースのクラスを指定します。スコープ修飾子 "::" が必要です。securable
権限を許可するセキュリティ保護可能なリソースを指定します。TO principal
プリンシパルの名前を指定します。セキュリティ保護可能なリソースに対する権限を許可できるプリンシパルは、そのリソースによって異なります。有効な組み合わせについては、後のトピックを参照してください。GRANT OPTION
権限を許可されたプリンシパルが、この権限を他のプリンシパルにも許可できることを示します。AS principal
このクエリを実行するプリンシパルが権限を許可する権利を取得した、元のプリンシパルを指定します。
説明
GRANT ステートメントの完全な構文は複雑です。前の構文図は、構造をわかりやすくするために簡略化されています。セキュリティ保護可能なリソースに対する権限を許可するための完全な構文については、後のトピックを参照してください。
許可された権限を取り消す場合は REVOKE ステートメントを使用します。また、GRANT ステートメントによってプリンシパルに特定の権限が許可されないようにするには DENY ステートメントを使用します。
権限を許可すると、指定したセキュリティ保護可能なリソースに対する権限の DENY または REVOKE は削除されます。対象のセキュリティ保護可能なリソースの上位スコープで同じ権限が拒否されている場合は、その DENY ステートメントが優先されますが、上位スコープで許可されている権限を取り消そうとしても、その REVOKE ステートメントは優先されません。
データベース レベルの権限は、指定されたデータベースのスコープ内で許可されます。ユーザーが別のデータベースのオブジェクトに対する権限を必要とする場合、そのデータベースにユーザー アカウントを作成するか、または現在のデータベースへのアクセス権と同様に、そのデータベースへのアクセス権もユーザー アカウントに与えます。
注意 |
---|
テーブル レベルの DENY ステートメントは列レベルの GRANT ステートメントよりも優先されません。この動作は権限の階層内で一貫していませんが、旧バージョンとの互換性のために保持されています。将来のリリースでは削除される予定です。 |
システム ストアド プロシージャ sp_helprotect では、データベース レベルのセキュリティ保護可能なリソースに対する権限がレポートされます。
WITH GRANT OPTION
GRANT … WITH GRANT OPTION では、権限を受け取るセキュリティ プリンシパルが、指定した権限を他のセキュリティ アカウントに与えることができるよう指定します。権限を受け取るプリンシパルがロールまたは Windows グループである場合は、そのグループまたはロールのメンバーでないユーザーに追加のオブジェクト権限を付与する必要があるときに AS 句を使用してください。GRANT ステートメントを実行できるのは、グループやロールではなくユーザーのみなので、グループやロールの特定のメンバーは、権限を付与する場合に AS 句を使用して明示的にロールまたはグループのメンバーシップを呼び出す必要があります。次の例は、ロールまたは Windows グループに権限を付与する場合の WITH GRANT OPTION の使用方法を示しています。
-- Execute the following as a database owner
GRANT EXECUTE ON TestProc TO TesterRole WITH GRANT OPTION
EXEC sp_addrolemember TesterRole, User1;
-- Execute the following as User1
-- The following fails because User1 does not have the permission as the User1
GRANT EXECUTE ON TestMe TO User2;
-- The following succeeds because User1 invokes the TesterRole membership
GRANT EXECUTE ON TestMe TO User2 AS TesterRole;
SQL Server 権限の図
データベース エンジンのすべての権限に関するポスター サイズの図を pdf 形式で提供しています。詳細については、https://go.microsoft.com/fwlink/?LinkId=229142 を参照してください。
権限
権限の許可者 (または AS オプションで指定されたプリンシパル) は、GRANT OPTION によって与えられた権限を保持しているか、権限が暗黙的に与えられる上位の権限を保持している必要があります。AS オプションを使用する場合は、追加の要件を満たす必要があります。詳細については、セキュリティ保護可能なリソース別のトピックを参照してください。
オブジェクトの所有者は、所有するオブジェクトの権限を許可できます。セキュリティ保護可能なリソースに対して CONTROL 権限があるプリンシパルは、そのリソースの権限を許可できます。
sysadmin 固定サーバー ロールのメンバーなど、CONTROL SERVER 権限が許可されているユーザーは、サーバー内のセキュリティ保護可能なリソースに対する権限を許可できます。db_owner 固定データベース ロールのメンバーなど、データベースに対する CONTROL 権限が許可されているユーザーは、データベース内のセキュリティ保護可能なリソースに対する権限を許可できます。スキーマに対する CONTROL 権限が許可されているユーザーは、スキーマ内のオブジェクトに対する権限を許可できます。
使用例
次の表は、セキュリティ保護可能なリソースと、その構文について説明しているトピックの一覧です。
アプリケーション ロール |
|
アセンブリ |
|
非対称キー |
|
証明書 |
|
コントラクト |
|
データベース |
|
エンドポイント |
|
フルテキスト カタログ |
|
フルテキスト ストップ リスト |
|
関数 |
|
ログイン |
|
メッセージ型 |
|
オブジェクト |
|
キュー |
|
リモート サービス バインド |
|
ロール |
|
ルート |
|
スキーマ |
|
サーバー |
|
サービス |
|
ストアド プロシージャ |
|
対称キー |
|
シノニム |
|
システム オブジェクト |
|
テーブル |
|
型 |
|
ユーザー |
|
ビュー |
|
XML スキーマ コレクション |