OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

データ参照をアクセス制御する方法(マスキング)

公開日:
更新日:
セキュリティ
#マスキング
#セキュリティ

はじめに

Verticaには、特定ロールが付与されているユーザに対して、データをマスキングして見せる機能が用意されています。本記事では、マスキング機能の基本的な使用方法をご紹介します。

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

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

 

  • customer表のc_name列に対してアクセス・ポリシーを作成

  • dbadminロールに対しては、マスキングなし

  • trole1ロールに対しては、マスキングなし

  • trole2ロールに対しては、マスキングあり (c_name列の先頭9バイトのみ参照させるようにマスキング)

  • その他のロールに対しては、マスキングあり (何も表示されないようにマスキング)

 

(1)マスキング前のデータ確認

まずはマスキング前のデータを確認します。

/* マスキングなしのデータを確認 */
dbadmin=> SELECT c_name FROM customer ORDER BY c_name LIMIT 5;
       c_name
--------------------
 Customer#000000001
 Customer#000000002
 Customer#000000003
 Customer#000000004
 Customer#000000005
(5 rows)

(2)マスキングの事前準備

各データベースユーザに対して、対象テーブルへの参照権限や、マスキング可否を制御するためにロールを付与します。ロールの情報を確認する場合は、以下の記事をご参照ください。

作成したロールの情報を確認する方法
https://www.ashisuto.co.jp/cm/analytics-database/role_informations.html

/* 非マスキング対象のユーザ作成、ロール作成、権限付与、ロール付与 */
dbadmin=> CREATE USER tuser1;
CREATE USER

dbadmin=> CREATE ROLE trole1;
CREATE ROLE

dbadmin=> GRANT USAGE ON SCHEMA public TO trole1;
GRANT PRIVILEGE

dbadmin=> GRANT SELECT ON customer TO trole1;
GRANT PRIVILEGE

dbadmin=> GRANT trole1 TO tuser1;
GRANT ROLE

dbadmin=> ALTER USER tuser1 DEFAULT ROLE trole1;
ALTER USER

/* マスキング対象のユーザ作成、ロール作成、権限付与、ロール付与 */
dbadmin=> CREATE USER tuser2;
CREATE USER

dbadmin=> CREATE ROLE trole2;
CREATE ROLE

dbadmin=> GRANT USAGE ON SCHEMA public TO trole2;
GRANT PRIVILEGE

dbadmin=> GRANT SELECT ON customer TO trole2;
GRANT PRIVILEGE

dbadmin=> GRANT trole2 TO tuser2;
GRANT ROLE

dbadmin=> ALTER USER tuser2 DEFAULT ROLE trole2;
ALTER USER

/* マスキング対象のユーザ作成、権限付与 */
dbadmin=> CREATE USER otheruser;
CREATE USER

dbadmin=> GRANT SELECT ON customer TO otheruser;
GRANT PRIVILEGE

dbadmin=> GRANT USAGE ON SCHEMA public TO otheruser;
GRANT PRIVILEGE

(3)アクセス・ポリシー作成

CREATE ACCESS POLICY文でcustomer表のc_name列にアクセス・ポリシーを作成します。
各ロールの指定はCASE文分岐し、マスキング内容は関数を使用して制御します。

/* スーパーユーザでアクセス・ポリシーを作成 */
dbadmin=> CREATE ACCESS POLICY ON customer
dbadmin-> FOR COLUMN c_name
dbadmin-> CASE
dbadmin-> WHEN enabled_role('dbadmin') THEN c_name               //dbadminロールに対してはマスキングなし
dbadmin-> WHEN enabled_role('trole1') THEN c_name                //trole1ロールに対してはマスキングなし
dbadmin-> WHEN enabled_role('trole2') THEN SUBSTR(c_name, 1, 9)  //trole2ロールに対してはマスキングあり
dbadmin-> ELSE NULL                                              //その他ロールに対してはマスキングあり
dbadmin-> END
dbadmin-> ENABLE;
CREATE ACCESS POLICY

(4)マスキング結果の確認

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

/* スーパーユーザ(dbadminロール)でデータ参照 */
dbadmin=> SELECT c_name FROM customer ORDER BY c_name LIMIT 5;
       c_name
--------------------
 Customer#000000001
 Customer#000000002
 Customer#000000003
 Customer#000000004
 Customer#000000005
(5 rows)

/* tuser1ユーザ(trole1ロール)でデータ参照 */
tuser1=> SELECT c_name FROM customer ORDER BY c_name LIMIT 5;
       c_name
--------------------
 Customer#000000001
 Customer#000000002
 Customer#000000003
 Customer#000000004
 Customer#000000005
(5 rows)

/* tuser2ユーザ(trole2ロール)でデータ参照 */
tuser2=> SELECT c_name FROM customer ORDER BY c_name LIMIT 5;
  c_name
-----------
 Customer#
 Customer#
 Customer#
 Customer#
 Customer#
(5 rows)

/* その他のユーザ(ロール無し)でデータ参照 */
otheruser=> SELECT c_name FROM customer ORDER BY c_name LIMIT 5;
 c_name
--------
 
 
 
 
 
(5 rows)

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

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

  • CREATE ACCESS POLICY文のマスキングのアクセス式に、以下を使用することはできません。

– 集計関数
– サブクエリ
– 分析関数
– ユーザ定義変換関数

  • オリジナルデータを参照できるユーザーのみ、アクセス・ポリシー対象列に対してDMLを実行できます。
    その他のユーザーはDMLを実行できません。

  • 一時テーブルに対してアクセス・ポリシーを作成することはできません。

  • フレックス・テーブルに対してアクセス・ポリシーを作成することは非推奨です。

参考情報

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

CREATE ACCESS POLICY
https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/Statements/CREATEACCESSPOLICY.htm

検証バージョンについて

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

更新履歴

2019/04/11 検証バージョンを9.2に変更
2016/05/16 本記事を公開