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>
です。 権限の概要については、「権限 (データベース エンジン)」を参照してください。
構文
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 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
AS <principal>
句を使用して、アクセス許可の権限付与者として記録されたプリンシパルが、ステートメントを実行しているユーザー以外のプリンシパルである必要があることを示します。 たとえば、ユーザー Mary
に12
のprincipal_id
があり、ユーザー Raul
がプリンシパル 15
であると仮定します。 Mary GRANT SELECT ON OBJECT::X TO Steven WITH GRANT OPTION AS Raul;
実行sys.database_permissions
テーブルは、ステートメントが実際にユーザー 12
(Mary
) によって実行された場合でも、grantor_prinicpal_id
が15
(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
権限の付与対象ユーザーは、スキーマ内の任意のオブジェクトに対して任意の権限を付与できます。
例
次の表は、セキュリティ保護可能なリソースと、その構文について説明している記事の一覧です。