GRANT オブジェクトのアクセス許可 (Transact-SQL)

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

テーブル、ビュー、テーブル値関数、ストアド プロシージャ、拡張ストアド プロシージャ、スカラー関数、集計関数、サービス キュー、またはシノニムに対する権限を許可します。

Transact-SQL 構文表記規則

構文

GRANT <permission> [ ,...n ] ON   
    [ OBJECT :: ][ schema_name ]. object_name [ ( column_name [ ,...n ] ) ]  
    TO <database_principal> [ ,...n ]   
    [ WITH GRANT OPTION ]  
    [ AS <database_principal> ]  
  
<permission> ::=  
    ALL [ PRIVILEGES ] | permission [ ( column_name [ ,...n ] ) ]  
  
<database_principal> ::=   
        Database_user   
    | Database_role   
    | Application_role   
    | Database_user_mapped_to_Windows_User   
    | Database_user_mapped_to_Windows_Group   
    | Database_user_mapped_to_certificate   
    | Database_user_mapped_to_asymmetric_key   
    | Database_user_with_no_login  

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

permission

スキーマに含まれるオブジェクトで許可できる権限を指定します。 アクセス許可のリストについては、解説を参照してください。

ALL

ALL を指定しても、可能な権限がすべて許可されるわけではありません。 ALL を指定すると、指定したオブジェクトに適用されるすべての ANSI-92 権限を許可することになります。 ALL の意味は、状況に応じて次のようになります。

  • スカラー関数の権限: EXECUTE、REFERENCES。
  • テーブル値関数の権限: DELETE、INSERT、REFERENCES、SELECT、UPDATE。
  • ストアド プロシージャの権限: EXECUTE。
  • テーブルの権限: DELETE、INSERT、REFERENCES、SELECT、UPDATE。
  • ビューの権限: DELETE、INSERT、REFERENCES、SELECT、UPDATE。

注意事項

ALL 権限は非推奨とされます。互換性のためだけに保持されています。

PRIVILEGES

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

column_name

権限を許可するテーブル、ビュー、またはテーブル値関数内の列の名前を指定します。 かっこ () が必要です。 列で許可できるのは、SELECT、REFERENCES、UPDATE および UNMASK の各アクセス許可だけです。 column_name は permissions 句内、またはセキュリティ保護可能なリソースの名前の後に指定できます。

注意事項

テーブル レベルの DENY は列レベルの GRANT ステートメントよりも優先されません。 この動作は権限の階層内で一貫していませんが、旧バージョンとの互換性のために保持されています。

ON [ OBJECT :: ] [ schema_name ] . object_name

権限を許可するオブジェクトを指定します。 OBJECT 句は、schema_name を指定する場合は省略可能です。 OBJECT 句を使用する場合は、スコープ修飾子 (::) が必要です。 schema_name が指定されていない場合、既定のスキーマが使用されます。 schema_name が指定されている場合、スキーマのスコープ修飾子 (.) が必要です。

TO <database_principal>

権限を許可するプリンシパルを指定します。

WITH GRANT OPTION

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

AS <database_principal>

このクエリを実行するプリンシパルが権限を許可する権利を取得した、元のプリンシパルを指定します。

Database_user
データベース ユーザーを指定します。

Database_role
データベース ロールを指定します。

Application_role
アプリケーション ロールを指定します。

Database_user_mapped_to_Windows_User
Windows ユーザーにマップされているデータベース ユーザーを指定します。

Database_user_mapped_to_Windows_Group
Windows グループにマップされているデータベース ユーザーを指定します。

Database_user_mapped_to_certificate
証明書にマップされているデータベース ユーザーを指定します。

Database_user_mapped_to_asymmetric_key
非対称キーにマップされているデータベース ユーザーを指定します。

Database_user_with_no_login
対応するサーバー レベルのプリンシパルがないデータベース ユーザーを指定します。

解説

重要

ALTERREFERENCE のアクセス許可を組み合わせることで、被付与者は、データを表示したり、許可されていない関数を実行したりできる場合があります。 たとえば、テーブルの ALTER アクセス許可と関数の REFERENCE アクセス許可を持つユーザーは、関数で計算列を作成して実行できます。 この場合、ユーザーには計算列の SELECT アクセス許可も必要です。

オブジェクトに関する情報は、各種カタログ ビューに表示されます。 詳しくは、オブジェクト カタログ ビュー (Transact-SQL) に関する記事を参照してください。

オブジェクトは、スキーマ レベルのセキュリティ保護可能なリソースで、権限の階層で親となっているスキーマに含まれています。 次の表に、オブジェクトで許可できる権限のうち最も限定的なものを、それらを暗黙的に含む一般的な権限と共に示します。

オブジェクト権限 権限が含まれるオブジェクト権限 権限が含まれるスキーマ権限
ALTER CONTROL ALTER
CONTROL CONTROL CONTROL
DELETE CONTROL DELETE
EXECUTE CONTROL EXECUTE
INSERT CONTROL INSERT
RECEIVE CONTROL CONTROL
REFERENCES CONTROL REFERENCES
SELECT RECEIVE SELECT
TAKE OWNERSHIP CONTROL CONTROL
UPDATE CONTROL UPDATE
VIEW CHANGE TRACKING CONTROL VIEW CHANGE TRACKING
VIEW DEFINITION CONTROL VIEW DEFINITION

アクセス許可

付与者 (または AS オプションで指定されたプリンシパル) は、GRANT OPTION で指定されたアクセス許可自体を保持しているか、アクセス許可が暗黙的に付与される上位のアクセス許可を保持している必要があります。

AS オプションを使用している場合は、次の追加要件があります。

AS 必要な追加権限
データベース ユーザー ユーザーに対する IMPERSONATE アクセス許可、db_securityadmin 固定データベース ロールのメンバーシップ、db_owner 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。
Windows ログインにマップされているデータベース ユーザー ユーザーに対する IMPERSONATE アクセス許可、db_securityadmin 固定データベース ロールのメンバーシップ、db_owner 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。
Windows グループにマップされているデータベース ユーザー Windows グループのメンバーシップ、db_securityadmin 固定データベース ロールのメンバーシップ、db_ownerr 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。
証明書にマップされているデータベース ユーザー db_securityadmin 固定データベース ロールのメンバーシップ、db_owner 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。
非対称キーにマップされているデータベース ユーザー db_securityadmin 固定データベース ロールのメンバーシップ、db_owner 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。
サーバー プリンシパルにマップされていないデータベース ユーザー ユーザーに対する IMPERSONATE アクセス許可、db_securityadmin 固定データベース ロールのメンバーシップ、db_owner 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。
データベース ロール ロールに対する ALTER アクセス許可、db_securityadmin 固定データベース ロールのメンバーシップ、db_owner 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。
アプリケーション ロール ロールに対する ALTER アクセス許可、db_securityadmin 固定データベース ロールのメンバーシップ、db_owner 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。

A. テーブルの SELECT アクセス許可を付与する

次の例では、AdventureWorks2022 データベース内にある Person.Address テーブルでの SELECT 権限を、ユーザー RosaQdM に対して許可します。

この例は、SQL 認証ログインにユーザーを使用するため、このままでは Microsoft Fabric で機能しませんが、この同じ例は、RosaQdM@contoso.com などの Microsoft Entra ID Fabric ユーザー に対して機能します。

GRANT SELECT ON OBJECT::Person.Address TO RosaQdM;  
GO  

B. ストアド プロシージャの EXECUTE アクセス許可を付与する

次の例では、ストアド プロシージャ HumanResources.uspUpdateEmployeeHireInfo での EXECUTE 権限を、アプリケーション ロール Recruiting11 に対して許可します。

USE AdventureWorks2022;   
GRANT EXECUTE ON OBJECT::HumanResources.uspUpdateEmployeeHireInfo  
    TO Recruiting11;  
GO   

C: GRANT OPTION を指定してビューの REFERENCES アクセス許可を付与する

次の例では、GRANT OPTION を指定して、ビュー HumanResources.vEmployee にある列 BusinessEntityID での REFERENCES 権限を、ユーザー Wanida に対して許可します。

この例は、SQL 認証ログインにユーザーを使用するため、このままでは Microsoft Fabric で機能しませんが、この同じ例は、Wanida@contoso.com などの Microsoft Entra ID Fabric ユーザー に対して機能します。

GRANT REFERENCES (BusinessEntityID) ON OBJECT::HumanResources.vEmployee   
    TO Wanida WITH GRANT OPTION;  
GO  

D. OBJECT 句を使用せずにテーブルの SELECT アクセス許可を付与する

次の例では、AdventureWorks2022 データベース内にある Person.Address テーブルでの SELECT 権限を、ユーザー RosaQdM に対して許可します。

この例は、SQL 認証ログインにユーザーを使用するため、このままでは Microsoft Fabric で機能しませんが、この同じ例は、RosaQdM@contoso.com などの Microsoft Entra ID Fabric ユーザー に対して機能します。

GRANT SELECT ON Person.Address TO RosaQdM;  
GO  

E. テーブルの SELECT アクセス許可をドメイン アカウントに付与する

次の例では、AdventureWorks2022 データベース内にある Person.Address テーブルでの SELECT 権限を、ユーザー AdventureWorks2022\RosaQdM に対して許可します。

この例は、ドメイン アカウントを使用するため、このままでは Microsoft Fabric で機能しませんが、この同じ例は、RosaQdM@contoso.com などの Microsoft Entra ID Fabric ユーザーに対して機能します。

GRANT SELECT ON Person.Address TO [AdventureWorks2022\RosaQdM];  
GO  

F. プロシージャの EXECUTE アクセス許可をロールに付与する

次の例では、ロールを作成し、AdventureWorks2022 データベースのプロシージャ uspGetBillOfMaterialsEXECUTE 権限をそのロールに対して許可します。

CREATE ROLE newrole ;  
GRANT EXECUTE ON dbo.uspGetBillOfMaterials TO newrole ;  
GO  

G. 列の UNMASK アクセス許可を付与する

次の例では、テーブル Data.Membership 内の列 email に対する UNMASK アクセス許可 (動的データ マスクの一部) をユーザー OutreachCoordinator に付与します。

動的データ マスクは現在 Microsoft Fabric ではサポートされていません。

GRANT UNMASK ON OBJECT::Data.Membership (email) to OutreachCoordinator;
GO