OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

データ参照をアクセス制御する方法(行アクセス)

公開日:
更新日:
基本操作
#ポリシー

はじめに

Verticaでは、特定のテーブルに行アクセス・ポリシーを作成できます。
本記事では、行アクセス・ポリシーの基本的な使用方法をご紹介します。

概要

テーブルに行アクセス・ポリシーを作成することで、データ参照のアクセスを制御することが可能になります。
行アクセス・ポリシーが作成されたテーブルにユーザーがクエリを実行すると、Verticaはテーブルのデータに対して行アクセス・ポリシーのWHERE式を評価します。
クエリは、行アクセス・ポリシーのWHERE式がtrueと評価された行のみを返します。

行アクセス・ポリシーの作成方法

データ参照のアクセスを制御するためには、CREATE ACCESS POLICY文を使用して行アクセス・ポリシーを作成します。
本記事で紹介する実行例は、次の内容を示します。

 

employees表に対して行アクセス・ポリシーを作成
manager_topロールに対しては、全てのデータが参照可能
manager_1ロールに対しては、dept_idr列が100のデータのみ参照可能
manager_2ロールに対しては、dept_idr列が200のデータのみ参照可能

テーブルとデータを確認

行アクセス・ポリシーで使用するデータを確認します。

dbadmin=> select * from employees; 
empid  | depid | salary  | rate 
-------+-------+---------+------ 
     1 |   100 | 3000.00 |     5 
     2 |   100 | 5000.00 |     3 
     3 |   100 | 2000.00 |     7 
     4 |   200 | 8000.00 |     4 
     5 |   200 | 9000.00 |     8 
     6 |   200 | 4000.00 |     2 
(6 rows)

ロールとユーザを作成

各データベースユーザに対して、対象テーブルへの参照権限や、データ参照のアクセスを制御するためにロールを付与します。

/* 行アクセス・ポリシー対象のロール作成、ユーザ作成、ロール付与、権限付与*/
dbadmin=> create role manager_top;
CREATE ROLE

dbadmin=> create role manager_100;
CREATE ROLE

dbadmin=> create role manager_200;
CREATE ROLE

dbadmin=> create user manager;
CREATE USER

dbadmin=> create user manager_1;
CREATE USER

dbadmin=> create user manager_2;
CREATE USER

dbadmin=> grant manager_top to manager;
GRANT ROLE

dbadmin=> grant manager_100 to manager_1;
GRANT ROLE

dbadmin=> grant manager_200 to manager_2;
GRANT ROLE

dbadmin=> alter user manager default role manager_top;
ALTER USER

dbadmin=> alter user manager_1 default role manager_100;
ALTER USER

dbadmin=> alter user manager_2 default role manager_200;
ALTER USER

dbadmin=> grant select on employees to manager;
GRANT PRIVILEGE

dbadmin=> grant select on employees to manager_1;
GRANT PRIVILEGE

dbadmin=> grant select on employees to manager_2;
GRANT PRIVILEG

行アクセス・ポリシーを作成

CREATE ACCESS POLICY文でemployees表に行アクセス・ポリシーを作成します。

WHERE式でtrueと評価されたデータのみ参照可能にします。

dbadmin=> CREATE ACCESS POLICY ON employees FOR ROWS
dbadmin-> WHERE
dbadmin-> enabled_role('manager_top') OR //manager_topロールに対しては、全データ参照可能
dbadmin-> ( enabled_role('manager_100') and depid = 100 ) OR //manager_100ロールに対しては、depid = 100 のデータのみ参照可能
dbadmin-> ( enabled_role('manager_200') and depid = 200 ) //manager_200ロールに対しては、depid = 200 のデータのみ参照可能
dbadmin-> ENABLE
dbadmin-> ;
CREATE ACCESS POLICY

行アクセス・ポリシーの結果を確認

行アクセス・ポリシー作成後のデータを確認します。
ユーザ(付与されているロール)に応じて、データ参照が制御されていることが分かります。

/* managerユーザ(manager_topロール)でデータ参照 */
manager=> select current_user();
current_user
--------------
manager
(1 row)

manager=> select * from employees;
empid  | depid | salary  | rate
-------+-------+---------+------
     1 |   100 | 3000.00 |     5
     2 |   100 | 5000.00 |     3
     3 |   100 | 2000.00 |     7
     4 |   200 | 8000.00 |     4
     5 |   200 | 9000.00 |     8
     6 |   200 | 4000.00 |     2
(6 rows)

/* manager_1ユーザ(manager_100ロール)でデータ参照 */
manager_1=> select current_user();
current_user
--------------
manager_1
(1 row)

manager_1=> select * from employees;
empid  | depid | salary  | rate
-------+-------+---------+------
     1 |   100 | 3000.00 |     5
     2 |   100 | 5000.00 |     3
     3 |   100 | 2000.00 |     7
(3 rows)

/* manager_2ユーザ(manager_200ロール)でデータ参照 */
manager_2=> select current_user();
current_user
--------------
manager_2
(1 row)

manager_2=> select * from employees;
empid  | depid | salary  | rate
-------+-------+---------+------
     4 |   200 | 8000.00 |     4
     5 |   200 | 9000.00 |     8
     6 |   200 | 4000.00 |     2
(3 rows)

行アクセス・ポリシーの制限事項

以下の制限事項があるため、ご留意ください。

・テーブルに含めることができる行アクセス・ポリシーは1つだけです。
・次のテーブルでは、行アクセス・ポリシーは無効です。
   – aggregate projectionsのあるテーブル
   – 一時テーブル
   – システムテーブル
   – ビュー
・行アクセス・ポリシーを使用してテーブルにダイレクトクエリを作成することはできません。

 

参考情報

Access Policies

https://www.vertica.com/docs/10.0.x/HTML/Content/Authoring/AdministratorsGuide/DBUsersAndPrivileges/AccessPolicies/AccessPoliciesOverview.htm

 

CREATE ACCESS POLICY

https://www.vertica.com/docs/10.0.x/HTML/Content/Authoring/SQLReferenceManual/Statements/CREATEACCESSPOLICY.htm

 

検証バージョンについて

この記事の内容はVertica 10.0で確認しています。

 

更新履歴

2020/09/24 本記事を公開