GRANT オブジェクトのアクセス許可 (Transact-SQL)
Applies to: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric の SQL 分析エンドポイント Microsoft Fabric のウェアハウス
テーブル、ビュー、テーブル値関数、ストアド プロシージャ、拡張ストアド プロシージャ、スカラー関数、集計関数、サービス キュー、またはシノニムに対する権限を許可します。
構文
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
引数
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
対応するサーバー レベルのプリンシパルがないデータベース ユーザーを指定します。
解説
重要
ALTER
と REFERENCE
のアクセス許可を組み合わせることで、被付与者は、データを表示したり、許可されていない関数を実行したりできる場合があります。 たとえば、テーブルの 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_owner r 固定データベース ロールのメンバーシップ、または 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
データベースのプロシージャ uspGetBillOfMaterials
の EXECUTE
権限をそのロールに対して許可します。
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