次の方法で共有


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 <some permission> ON <some object> TO <some user, login, or group>です。 権限の概要については、「権限 (データベース エンジン)」を参照してください。

Transact-SQL 構文表記規則

構文

SQL Server および Azure SQL データベース の構文

-- Simplified syntax for GRANT
GRANT { ALL [ PRIVILEGES ] }
      | permission [ ( column [ , ...n ] ) ] [ , ...n ]
      [ ON [ class :: ] securable ] TO principal [ , ...n ]
      [ WITH GRANT OPTION ] [ AS principal ]

Azure Synapse Analytics と Parallel Data Warehouse と 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の付与は、次のアクセス許可を付与することと同じです。

セキュリティ保護可能 アクセス許可
データベース BACKUP DATABASEBACKUP LOGCREATE DATABASECREATE DEFAULTCREATE FUNCTIONCREATE PROCEDURECREATE RULECREATE TABLE、および CREATE VIEW
スカラー関数 EXECUTE および REFERENCES
テーブル値関数 DELETEINSERTREFERENCESSELECT、および UPDATE
ストアド プロシージャ EXECUTE
テーブル DELETEINSERTREFERENCESSELECT、および UPDATE
表示 DELETEINSERTREFERENCESSELECT、および UPDATE

PRIVILEGES

ISO 準拠のために用意されています。 ALLの動作は変更されません。

permission

アクセス許可の名前。 セキュリティ保護可能なリソースへのアクセス許可の有効なマッピングについては、次のセクションで説明します。

column

権限を許可するテーブルの列の名前を指定します。 かっこ () が必要です。

class

権限を許可するセキュリティ保護可能なリソースのクラスを指定します。 スコープ修飾子 :: が必要です。

securable

権限を許可するセキュリティ保護可能なリソースを指定します。

TO principal

プリンシパルの名前。 セキュリティ保護可能なリソースに対する権限を許可できるプリンシパルは、そのリソースによって異なります。 有効な組み合わせについては、次のセクションを参照してください。

GRANT OPTION

権限が許可された被付与者が、この権限を他のプリンシパルにも許可できることを示します。

AS principal

AS <principal>句を使用して、アクセス許可の権限付与者として記録されたプリンシパルが、ステートメントを実行しているユーザー以外のプリンシパルである必要があることを示します。 たとえば、ユーザー Mary12principal_idがあり、ユーザー Raulがプリンシパル 15であると仮定します。 Mary GRANT SELECT ON OBJECT::X TO Steven WITH GRANT OPTION AS Raul;実行sys.database_permissionsテーブルは、ステートメントが実際にユーザー 12 (Mary) によって実行された場合でも、grantor_prinicpal_id15 (Raul) されたことを示します。

アクセス許可チェーンを明示的に定義する必要がない限り、通常、 AS 句の使用はお勧めしません。 詳細については、「 アクセス許可チェック アルゴリズムの概要を参照してください。

このステートメントで AS を使用しても、別のユーザーを偽装する機能は意味しません。

解説

GRANT ステートメントの完全な構文は複雑です。 前の構文図は、その構造に注意を引くために簡略化されました。 特定のセキュリティ保護可能なリソースに対するアクセス許可を付与するための完全な構文については、この記事で後述する記事で説明します。

REVOKE ステートメントを使用して付与されたアクセス許可を削除できます。また、DENY ステートメントを使用して、プリンシパルがGRANTを介して特定のアクセス許可を取得できないようにすることができます。

アクセス許可を付与すると、指定したセキュリティ保護可能なリソースに対するアクセス許可の DENY または REVOKE が削除されます。 セキュリティ保護可能なリソースを含む上位のスコープで同じアクセス許可が拒否された場合、 DENY が優先されます。 ただし、許可されたアクセス許可を高いスコープで取り消しても、優先されません。

データベース レベルの権限は、指定されたデータベースのスコープ内で許可されます。 ユーザーが別のデータベースのオブジェクトに対する権限を必要とする場合、そのデータベースにユーザー アカウントを作成するか、または現在のデータベースへのアクセス権と同様に、そのデータベースへのアクセス権もユーザー アカウントに与えます。

注意事項

テーブル レベルの 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 TestProc TO User2;

-- The following succeeds because User1 invokes the TesterRole membership
GRANT EXECUTE ON TestProc 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 権限の付与対象ユーザーは、スキーマ内の任意のオブジェクトに対して任意の権限を付与できます。

次の表は、セキュリティ保護可能なリソースと、その構文について説明している記事の一覧です。

セキュリティ保護可能 GRANT の構文
アプリケーション ロール GRANT (データベース プリンシパルの権限の許可) (Transact-SQL)
アセンブリ GRANT (アセンブリの権限の許可) (Transact-SQL)
非対称キー GRANT (非対称キーの権限の許可) (Transact-SQL)
可用性グループ 可用性グループの権限の許可 (Transact-SQL)
Certificate GRANT (証明書の権限の許可) (Transact-SQL)
コントラクト GRANT (Service Broker の権限の許可) (Transact-SQL)
データベース GRANT (データベースの権限の許可) (Transact-SQL)
データベース スコープ資格情報 GRANT (データベース スコープの資格情報の許可) (Transact-SQL)
エンドポイント GRANT (エンドポイントの権限の許可) (Transact-SQL)
フルテキスト カタログ GRANT (フルテキストの権限の許可) (Transact-SQL)
フルテキスト ストップリスト GRANT (フルテキストの権限の許可) (Transact-SQL)
機能 GRANT (オブジェクトの権限の許可) (Transact-SQL)
ログイン GRANT (サーバー プリンシパルの権限の許可) (Transact-SQL)
メッセージ型 GRANT (Service Broker の権限の許可) (Transact-SQL)
Object GRANT (オブジェクトの権限の許可) (Transact-SQL)
キュー GRANT (オブジェクトの権限の許可) (Transact-SQL)
リモート サービス バインド GRANT (Service Broker の権限の許可) (Transact-SQL)
Role GRANT (データベース プリンシパルの権限の許可) (Transact-SQL)
ルート GRANT (Service Broker の権限の許可) (Transact-SQL)
スキーマ GRANT (スキーマ権限の許可) (Transact-SQL)
検索プロパティ リスト GRANT (検索プロパティ リスト権限の許可) (Transact-SQL)
サーバー GRANT (サーバーの権限の許可) (Transact-SQL)
サービス GRANT (Service Broker の権限の許可) (Transact-SQL)
ストアド プロシージャ GRANT (オブジェクトの権限の許可) (Transact-SQL)
対称キー GRANT (対称キーの権限の許可) (Transact-SQL)
シノニム GRANT (オブジェクトの権限の許可) (Transact-SQL)
システム オブジェクト GRANT (システム オブジェクトの権限の許可) (Transact-SQL)
テーブル GRANT (オブジェクトの権限の許可) (Transact-SQL)
種類 GRANT (型の権限の許可) (Transact-SQL)
User GRANT (データベース プリンシパルの権限の許可) (Transact-SQL)
View GRANT (オブジェクトの権限の許可) (Transact-SQL)
XML スキーマ コレクション GRANT (XML スキーマ コレクションの権限の許可) (Transact-SQL)