目次
はじめに
Verticaには、特定ロールが付与されているユーザに対して、データをマスキングして見せる機能が用意されています。本記事では、マスキング機能の基本的な使用方法をご紹介します。アクセス・ポリシーの作成方法
マスキングするためには、CREATE ACCESS POLICY文を使用してアクセス・ポリシーを作成します。本記事で紹介する実行例は、次の内容を示します。
- customer表のc_name列に対してアクセス・ポリシーを作成
- dbadminロールに対しては、マスキングなし
- trole1ロールに対しては、マスキングなし
- trole2ロールに対しては、マスキングあり (c_name列の先頭9バイトのみ参照させるようにマスキング)
- その他のロールに対しては、マスキングあり (何も表示されないようにマスキング)
(1)マスキング前のデータ確認
まずはマスキング前のデータを確認します。
1 2 3 4 5 6 7 8 9 10 |
/* マスキングなしのデータを確認 */ 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)マスキングの事前準備
各データベースユーザに対して、対象テーブルへの参照権限や、マスキング可否を制御するためにロールを付与します。ロールの情報を確認する場合は、以下の記事をご参照ください。- 作成したロールの情報を確認する方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
/* 非マスキング対象のユーザ作成、ロール作成、権限付与、ロール付与 */ 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文分岐し、マスキング内容は関数を使用して制御します。
1 2 3 4 5 6 7 8 9 10 11 |
/* スーパーユーザでアクセス・ポリシーを作成 */ 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)マスキング結果の確認
アクセス・ポリシー作成後のデータを確認します。ユーザ(付与されているロール)に応じて、マスキング有無が制御されていることが分かります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
/* スーパーユーザ(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 Policieshttps://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 本記事を公開
- 投稿タグ
- マスキング, セキュリティ, ACCESS POLICY, アクセス制御