SQL Server で異なるデータベースのビューに SELECT 権限を付与する方法
異なるデータベースにあるテーブルを基に作成されたビューに対して、SELECT 権限を付与する方法について説明します。
前提条件
- 以下の権限を持っている必要があります。
- ビューの所有者であること
- 対象となるデータベースへのアクセス権限
- 対象となるテーブルへの SELECT 権限
手順
- 以下の構文を使用して、GRANT ステートメントを作成します。
GRANT SELECT ON <ビュー名> TO <ユーザー名>
FROM <データベース名>
例
GRANT SELECT ON vw_Sales
TO John
FROM AdventureWorks2019
解説
GRANT
: 権限を付与するコマンドSELECT
: 付与する権限<ビュー名>
: 権限を付与するビューの名前TO
: 権限を付与するユーザーの名前FROM
: ビューが存在するデータベースの名前
注意事項
- ビューの所有者のみが、ビューに対する権限を付与できます。
- 対象となるデータベースへのアクセス権限がない場合は、権限を付与できません。
- 対象となるテーブルへの SELECT 権限がない場合は、ビューに対する SELECT 権限を付与できません。
- AdventureWorks2019 データベースに
Sales
テーブルとvw_Sales
ビューが存在します。 - ユーザー
John
にvw_Sales
ビューへの SELECT 権限を付与します。
コード
USE AdventureWorks2019;
GRANT SELECT ON vw_Sales
TO John;
USE AdventureWorks2019;
ステートメントは、AdventureWorks2019 データベースをアクティブ化します。GRANT SELECT ON vw_Sales TO John;
ステートメントは、ユーザーJohn
にvw_Sales
ビューへの SELECT 権限を付与します。
実行結果
ユーザー John
は、vw_Sales
ビューに対して SELECT クエリを実行できるようになります。
- ユーザー
John
がSales
テーブルに直接アクセスするには、Sales
テーブルに対する SELECT 権限も付与する必要があります。
データベース ロールを作成し、そのロールに SELECT 権限を付与する方法です。
- 以下の構文を使用して、データベース ロールを作成します。
CREATE ROLE <ロール名>
- 以下の構文を使用して、ロールに SELECT 権限を付与します。
GRANT SELECT ON <ビュー名> TO <ロール名>
FROM <データベース名>
- 以下の構文を使用して、ユーザーにロールを割り当てます。
EXEC sp_addrolemember @rolename = <ロール名>, @membername = <ユーザー名>
-- ロールを作成
CREATE ROLE SalesViewer
-- ロールに SELECT 権限を付与
GRANT SELECT ON vw_Sales
TO SalesViewer
FROM AdventureWorks2019
-- ユーザーにロールを割り当て
EXEC sp_addrolemember @rolename = SalesViewer, @membername = John
CREATE ROLE
: データベース ロールを作成するコマンド<ロール名>
: 作成するロールの名前GRANT SELECT ON <ビュー名> TO <ロール名> FROM <データベース名>
: ロールに SELECT 権限を付与するコマンドEXEC sp_addrolemember @rolename = <ロール名>, @membername = <ユーザー名>
: ユーザーにロールを割り当てるコマンド
- データベース ロールを作成するには、db_owner 権限が必要です。
- ロールに割り当てられたユーザーは、ロールに付与された権限のみ行使できます。
委任を使用する
委任を使用して、別のユーザーに権限を委任する方法です。
- 以下の構文を使用して、委任を作成します。
GRANT SELECT ON <ビュー名> TO <ユーザー名> WITH GRANT OPTION
FROM <データベース名>
GRANT SELECT ON vw_Sales
TO John
WITH GRANT OPTION
FROM AdventureWorks2019
WITH GRANT OPTION
: 委任されたユーザーが、他のユーザーに権限を再委任できることを指定します。
- 委任を使用するには、委任するユーザーが
GRANT OPTION
を持っている必要があります。 - 委任されたユーザーは、委任された権限を他のユーザーに再委任できます。
異なるデータベースのビューに SELECT 権限を付与するには、いくつかの方法があります。
- 状況に合わせて最適な方法を選択してください。
- 各方法のメリットとデメリットを理解した上で、権限を付与してください。
sql-server