GRANT (Transact-SQL)
適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Microsoft Fabric の SQL 分析エンドポイント
Microsoft Fabric のウェアハウス
セキュリティ保護可能なリソースに対する権限をプリンシパルに許可します。 一般的な考え方としては、GRANT <権限> ON <オブジェクト> TO <ユーザー、ログイン、またはグループ> という形になります。 権限の概要については、「権限 (データベース エンジン)」を参照してください。
構文
-- Syntax for SQL Server and Azure SQL Database
-- Simplified syntax for GRANT
GRANT { ALL [ PRIVILEGES ] }
| permission [ ( column [ ,...n ] ) ] [ ,...n ]
[ ON [ class :: ] securable ] TO principal [ ,...n ]
[ WITH GRANT OPTION ] [ AS principal ]
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse and Microsoft Fabric
GRANT
<permission> [ ,...n ]
[ ON [ <class_type> :: ] securable ]
TO principal [ ,...n ]
[ WITH GRANT OPTION ]
[;]
<permission> ::=
{ see the tables below }
<class_type> ::=
{
LOGIN
| DATABASE
| OBJECT
| ROLE
| SCHEMA
| USER
}
Note
SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。
引数
ALL
このオプションは旧バージョンとの互換性のためだけに保持されており、非推奨とされます。 実際にはすべての権限が許可されるわけではありません。 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。
セキュリティ保護可能なリソースがテーブルの場合、ALL は DELETE、INSERT、REFERENCES、SELECT、および UPDATE を意味します。
セキュリティ保護可能なリソースがビューの場合、ALL は DELETE、INSERT、REFERENCES、SELECT、および UPDATE を意味します。
PRIVILEGES
ISO 準拠のために用意されています。 ALL の動作は変更されません。
permission
権限の名前を指定します。 アクセス許可とセキュリティ保護可能なリソースの有効な組み合わせについては、後のトピックを参照してください。
column
権限を許可するテーブルの列の名前を指定します。 かっこ () で囲む必要があります。
class
権限を許可するセキュリティ保護可能なリソースのクラスを指定します。 スコープ修飾子 :: が必要です。
securable
権限を許可するセキュリティ保護可能なリソースを指定します。
TO principal
プリンシパルの名前です。 セキュリティ保護可能なリソースに対する権限を許可できるプリンシパルは、そのリソースによって異なります。 有効な組み合わせについては、後のトピックを参照してください。
GRANT OPTION
権限が許可された被付与者が、この権限を他のプリンシパルにも許可できることを示します。
AS principal
AS GRANT SELECT ON OBJECT::X TO Steven WITH GRANT OPTION AS Raul;
を実行します。ステートメントは実際にはユーザー 13 (Mary) によって実行されましたが、sys.database_permissions テーブルでは、grantor_prinicpal_id は 15 (Raul) であることが示されます。
一般に、AS 句の使用は、権限チェーンを明示的に定義する必要がある場合を除き、推奨されません。 詳しくは、「権限 (データベース エンジン)」の「権限チェック アルゴリズムの概要」セクションをご覧ください。
このステートメントで AS を使っても、別のユーザーを偽装できることは意味しません。
解説
GRANT ステートメントの完全な構文は複雑です。 前の構文ダイアグラムは、構造をわかりやすくするために簡略化されています。 セキュリティ保護可能なリソースに対するアクセス許可を許可するための完全な構文については、後の記事を参照してください。
許可された権限を取り消す場合は REVOKE ステートメントを使用します。また、GRANT によってプリンシパルに特定の権限が許可されないようにするには DENY ステートメントを使用します。
権限を許可すると、指定したセキュリティ保護可能なリソースに対する権限の DENY または REVOKE は削除されます。 対象のセキュリティ保護可能なリソースの上位スコープで同じ権限が拒否されている場合は、その DENY ステートメントが優先されますが、 上位スコープで許可されている権限を取り消そうとしても、その REVOKE ステートメントは優先されません。
データベース レベルの権限は、指定されたデータベースのスコープ内で許可されます。 ユーザーが別のデータベースのオブジェクトに対する権限を必要とする場合、そのデータベースにユーザー アカウントを作成するか、または現在のデータベースへのアクセス権と同様に、そのデータベースへのアクセス権もユーザー アカウントに与えます。
注意事項
テーブル レベルの DENY は列レベルの GRANT ステートメントよりも優先されません。 この動作は権限の階層内で一貫していませんが、旧バージョンとの互換性のために保持されています。 将来のリリースでは削除される予定です。
システム ストアド プロシージャ sp_helprotect では、データベース レベルのセキュリティ保護可能なリソースに対する権限をレポートします。
Microsoft Fabric では、現在、CREATE USER を明示的に実行できません。 GRANT または DENY が実行されると、ユーザーが自動的に作成されます。
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://aka.ms/sql-permissions-poster を参照してください。
アクセス許可
権限の許可者 (または AS オプションで指定されたプリンシパル) は、GRANT OPTION によって与えられた権限を保持しているか、権限が暗黙的に与えられる上位の権限を保持している必要があります。 AS オプションを使用する場合は、追加の要件を満たす必要があります。 詳細については、セキュリティ保護可能なリソース別の記事を参照してください。
オブジェクトの所有者は、所有するオブジェクトの権限を許可できます。 セキュリティ保護可能なリソースに対して CONTROL 権限があるプリンシパルは、そのリソースの権限を許可できます。
sysadmin 固定サーバー ロールのメンバーなど、CONTROL SERVER 権限が許可されているユーザーは、サーバー内のセキュリティ保護可能なリソースに対する権限を許可できます。 db_owner 固定データベース ロールのメンバーなど、データベースに対する CONTROL 権限が許可されているユーザーは、データベース内のセキュリティ保護可能なリソースに対する権限を許可できます。 スキーマに対する CONTROL 権限が許可されているユーザーは、スキーマ内のオブジェクトに対する権限を許可できます。
例
次の表は、セキュリティ保護可能なリソースと、その構文について説明している記事の一覧です。
参照
フィードバック
フィードバックの送信と表示