許可: GRANT、 DENY、 REVOKE

適用対象:Azure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス

GRANT文や DENY文を使って、セキュリティプリンシパル(ログイン、データベースユーザー、データベースロールなど)に対して、セキュア可能(データベース、テーブル、ビューなど)に対して権限(UPDATEなど)を付与または拒否します。 許可の付与または拒否 REVOKE を使えます。

サーバー レベルのアクセス許可は、ログインに適用されます。 データベース レベルのアクセス許可は、データベースのユーザー ロールとデータベース ロールに適用されます。

どのようなアクセス許可が許可および拒否されているかを表示するには、sys.server_permissions および sys.database_permissions ビューのクエリを実行します。 セキュリティ プリンシパルに明示的に許可されていない、または拒否されているアクセス許可は、権限を設定したロールのメンバーシップを持つことにより、継承できます。 固定データベース ロールのアクセス許可は変更できず、sys.server_permissions および sys.database_permissions ビューは表示されません。

  • GRANT 明示的に1つ以上の権限を付与します。

  • DENY 明確に校長が1つ以上の権限を持つことを否定します。

  • REVOKE 既存の GRANT または DENY 権限を削除します。

Transact-SQL 構文表記規則

構文

-- Azure Synapse Analytics and Parallel Data Warehouse and Microsoft Fabric
GRANT   
    <permission> [ ,...n ]  
    [ ON [ <class_type> :: ] securable ]   
    TO principal [ ,...n ]  
    [ WITH GRANT OPTION ]  
[;]  
  
DENY   
    <permission> [ ,...n ]  
    [ ON [ <class_type> :: ] securable ]   
    TO principal [ ,...n ]  
    [ CASCADE ]  
[;]  
  
REVOKE   
    <permission> [ ,...n ]  
    [ ON [ <class_type> :: ] securable ]   
    [ FROM | TO ] principal [ ,...n ]  
    [ CASCADE ]  
[;]  
  
<permission> ::=  
{ see the tables below }  
  
<class_type> ::=  
{  
      LOGIN  
    | DATABASE  
    | OBJECT  
    | ROLE  
    | SCHEMA  
    | USER  
}  

引数

<許可>[ ,...n ]
1 つまたは複数のアクセス許可を付与、拒否、または取り消します。

ON [ :: ] <> 句は、アクセス許可を許可、拒否、または削除するセキュリティ保護可能なパラメーターを記述します。

セキュリティ保護可能なクラス型。 これは LOGINDATABASEOBJECTSCHEMAROLE、または USERのどれかです。 SERVERclass_type にアクエス許可を付与することもできますが、SERVER は、これらのアクセス許可に対して指定されません。 DATABASE 許可に「 DATABASE 」という言葉が含まれている場合(例: ALTER ANY DATABASE)は指定されていません。 class_type が指定されておらず、アクセス許可のタイプがサーバーまたはデータベースのクラスに制限されていない場合、クラスは OBJECT と見なされます。

securable
アクセス許可を付与、拒否、または取り消す、ログイン、データベース、テーブル、ビュー、スキーマ、プロシージャ、ロール、またはユーザーの名前。 オブジェクト名は、「Transact-SQL 構文表記規則」で説明されている 3 部構成の名前付け規則を使用して、指定することができます。

TO principal [ , ...n ]
アクセス許可を付与、拒否、または取り消す 1 つまたは複数のプリンシパル。 プリンシパルは、ログイン、データベース ユーザー、またはデータベース ロールの名前です。

FROM principal [ , ...n ]
アクセス許可を取り消す 1 つまたは複数のプリンシパル。 プリンシパルは、ログイン、データベース ユーザー、またはデータベース ロールの名前です。 FROMREVOKE 文と共にしか使えません。 TOGRANTDENY、または REVOKEと組み合わせて使用できます。

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

CASCADE
指定したプリンシパル、およびこのプリンシパルによって権限が許可されている他のすべてのプリンシパルに対して、権限が拒否または取り消されていることを示します。 校長が許可を得てオプションがある場合に必須GRANT

GRANT オプション
指定した権限を与える許可を取り消すことを示します。 CASCADE 引数を使用する場合、この引数は必須です。

重要

もし校長が指定された許可を得て GRANT オプションがない場合、その許可自体は取り消されます。

アクセス許可

許可を与えるには、付与者が WITH GRANT オプションを含む許可を直接持っているか、または許可が付与されることを示唆するより高い許可を持っている必要があります。 オブジェクトの所有者は、所有するオブジェクトの権限を許可できます。 セキュリティ保護可能なリソースに対して CONTROL 権限があるプリンシパルは、そのリソースの権限を許可できます。 db_owner および db_securityadmin 固定データベース ロールのメンバーは、データベース内のすべてのアクセス権を付与できます。

全般的な解説

プリンシパルへのアクセス許可の拒否または取り消しは、承認されて現在実行中の要求には影響しません。 アクセスをすぐに制限するには、アクティブな要求をキャンセルするか、現在のセッションを終了させる必要があります。

Note

ほとんどの固定サーバー ロールは、このリリースでは使用できません。 ユーザー定義データベース ロールを使用してください。 sysadmin 固定サーバー ロールにログインを追加することはできません。 CONTROL SERVER アクセス許可を付与すると、sysadmin 固定サーバー ロールのメンバーシップが概算されます。

いくつかのステートメントでは、複数のアクセス許可が必要です。 例えば、テーブルを作成するにはデータベース内の CREATE TABLE 権限と、そのテーブルを含むテーブルの ALTER SCHEMA 権限が必要です。

Analytics Platform System (PDW) はストアドプロシージャを実行して、ユーザーの操作を計算ノードに分散することがあります。 そのため、データベース全体に対する execute 権限を拒否できません (たとえば DENY EXECUTE ON DATABASE::<name> TO <user>; は失敗します)。回避策として、ユーザー スキーマまたは特定のオブジェクト (プロシージャ) に対する execute 権限を拒否します。

Microsoft Fabricでは、現時点でCREATE USERを明示的に実行することはできません。 GRANTやDENYが実行されると、ユーザーは自動的に作成されます。

Microsoft Fabric では、サーバー レベルの権限は管理できません。

暗黙的および明示的なアクセス許可

明示的なアクセス許可は、GRANTまたはDENYステートメントによってプリンシパルに与えられるGRANTまたはDENYのアクセス許可です。

暗黙的権限とは、プリンシパル(ログイン、ユーザー、またはデータベースロール)が他のデータベースロールから継承したGRANTまたはDENY権限のことです。

暗黙的なアクセス許可は、包含または親のアクセス許可からも継承できます。 例えば、テーブル上の権限 UPDATE 、そのテーブルを含むスキーマの権限 UPDATE 、テーブルに対する CONTROL 権限を継承することができます。

所有権の継承

複数のデータベース オブジェクトが連続して互いにアクセスしている場合、このシーケンスはチェーンと呼ばれます。 このようなチェーンは単独では存在しませんが、SQL Server がチェーン内のリンクを移動する際に、SQL Server によって、構成要素であるオブジェクトに対する権限が、オブジェクトに個別にアクセスした場合とは異なる方法で評価されます。 所有権の継承は、セキュリティの管理に重要な影響を与えます。 所有権の継承の詳細については、次を参照してください「所有権の継承」および「チュートリアル:所有権の継承とコンテキストの切り替え」です。

アクセス許可の一覧

サーバー レベルのアクセス許可

サーバー レベルのアクセス許可をログインに付与、拒否、および取り消すことができます。

サーバーに適用されるアクセス許可

  • 制御サーバー

  • 一括操作の管理

  • 任意の接続を変更する

  • "任意の DATABASE を変更"

  • 何でも作成してください DATABASE

  • "任意の EXTERNAL DATA SOURCE を変更"

  • "任意の EXTERNAL FILE FORMAT を変更"

  • "任意の LOGIN を変更"

  • サーバーの状態を変更

  • SQLに接続

  • VIEW 任意の定義

  • VIEW どんな人でも DATABASE

  • VIEW サーバーの状態

ログインに適用される権限

  • コントロールオン LOGIN

  • オルター・オン LOGIN

  • なりすましをして LOGIN

  • VIEW 定義

データベース レベルのアクセス許可

データベース レベルのアクセス許可は、データベース ユーザーおよびユーザー定義のデータベース ロールに付与、拒否、および取り消すことができます。

データベースのすべてのクラスに適用される権限

  • CONTROL

  • ALTER

  • VIEW 定義

ユーザー以外のすべてのデータベース クラスに適用される権限

  • 所有権を取得する

データベースのみに適用されるアクセス許可

  • "任意の DATABASE を変更"

  • オルター・オン DATABASE

  • 任意のデータスペースを変更する

  • "任意の ROLE を変更"

  • "任意の SCHEMA を変更"

  • "任意の USER を変更"

  • BACKUP DATABASE

  • 接続して DATABASE

  • CREATE PROCEDURE

  • CREATE ROLE

  • CREATE SCHEMA

  • CREATE TABLE

  • CREATE VIEW

  • SHOWPLAN

ユーザーにのみ適用されるアクセス許可

  • IMPERSONATE

データベース、スキーマ、およびオブジェクトに適用される権限

  • ALTER

  • DELETE

  • EXECUTE

  • INSERT

  • SELECT

  • UPDATE

  • REFERENCES

各権限の種類の定義については、「権限 (データベース エンジン)」を参照してください。

既定の権限

次に、既定のアクセス許可について説明します。

  • CREATE LOGIN文を使ってログインを作成すると、新しいログインはCONNECT SQL権限を受け取ります。

  • すべてのログインは、public サーバー ロールのメンバーであり、public から削除することはできません。

  • CREATE USER権限を使ってデータベースユーザーを作成すると、データベースユーザーはデータベース内でCONNECT権限を受け取ります。

  • パブリック ロールを含むすべてのプリンシパルは、既定では明示的または暗黙的なアクセス許可を持っていません。

  • ログインまたはユーザーがデータベースまたはオブジェクトの所有者になった場合、ログインまたはユーザーには、常に、データベースまたはオブジェクトに対するすべてのアクセス許可が与えられます。 所有者のアクセス許可は、変更することはできず、明示的なアクセス許可として表示されません。 GRANTDENYREVOKEの声明は所有者に影響を与えません。

  • Sa ログインは、アプライアンス上のすべてのアクセス許可を持っています。 所有者のアクセス許可と同様に、sa アクセス許可を変更することはできず、明示的なアクセス許可として表示されません。 GRANTDENYREVOKEの文はSAログインには影響しません。 Sa ログインの名前を変更することはできません。

  • USE ステートメントでは、権限は必要ありません。 すべてのプリンシパルが、USE ステートメントを任意のデータベース上で実行できます。

例: Azure Synapse Analytics、Analytics Platform System (PDW)

A. ログインに、サーバー レベル権限を許可する

次の 2 つのステートメントでは、ログインに、サーバー レベルの権限を付与します。

GRANT CONTROL SERVER TO [Ted];  
GRANT ALTER ANY DATABASE TO Mary;  

B. ログインに、サーバー レベル権限を許可する

次の例では、サーバー プリンシパル (別のログイン) に対して、ログインに、サーバー レベルの権限を付与します。

GRANT  VIEW DEFINITION ON LOGIN::Ted TO Mary;  

C. ユーザーに、データベース レベル権限を許可する

次の例では、データベース プリンシパル (別のユーザー) に対して、ユーザーに、データベース レベルのアクセス許可を付与します。

GRANT VIEW DEFINITION ON USER::[Ted] TO Mary;  

D. スキーマの権限を許可、拒否、および取り消す

以下の GRANT 文により、Yuenはdboスキーマ内の任意のテーブルやビューからデータを選択することができます。

GRANT SELECT ON SCHEMA::dbo TO [Yuen];  

以下の DENY 文により、Yuenはdboスキーマ内のいかなるテーブルやビューからもデータを選択することができません。 Yuen がロールのメンバーシップを通してなど、その他の何らかの方法で権限を持っている場合でも、データを読み取ることはできません。

DENY SELECT ON SCHEMA::dbo TO [Yuen];  

以下の REVOKE 文は DENY 権限を解除します。 Yuen の明示的なアクセス許可は、ニュートラルになりました。 Yuen は、ロールのメンバーシップなどその他のいくつかの暗黙的な権限を任意のテーブルからデータを選択できる場合があります。

REVOKE SELECT ON SCHEMA::dbo TO [Yuen];  

E. 省略可能な OBJECT:: 句を示す

OBJECT は、権限ステートメントの既定のクラスであるために、次の 2 つのステートメントは同じです。 OBJECT:: 句は省略可能です。

GRANT UPDATE ON OBJECT::dbo.StatusTable TO [Ted];  
GRANT UPDATE ON dbo.StatusTable TO [Ted];