OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

新規にテーブルを作成した場合の権限管理 (7.2新機能)

公開日:
更新日:
セキュリティ
新バージョン/機能
#スキーマ
#権限

はじめに

Vertica7.2より、スキーマレベルの権限継承が可能になりました。従来は、新規にテーブルを作成した場合、その都度DBユーザーに作成したテーブルの権限付与が必要でした。Vertica7.2からは、予めDBユーザーにスキーマの権限を付与しておくことで、新規に作成したテーブルに対しても権限を自動で付与することできます。

スキーマレベルの権限継承_ロール編

本機能を利用した場合、従来と比べて権限付与のオペレーションを省略することができます。

スキーマレベル権限継承の動作確認

本機能を利用した場合の実行例をご紹介します。

構文

テーブルとビューで、本機能を利用することができます。

【GRANT文】

GRANT { { USAGE | CREATE | SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRUNCATE } | ALL [ PRIVILEGES ] }
ON [ schema name ]
TO { username | role | PUBLIC } [ , … ]

GRANT文でスキーマに対しての権限をDBユーザやロールに割当てます。

【CREATE文】

CREATE SCHEMA { … } [ DEFAULT { INCLUDE | EXCLUDE } [SCHEMA] PRIVILEGES ];

 「INCLUDE」:含める
 「EXCLUDE」:含めない

テーブルを新規で作成する場合、スキーマに付与された権限を含めるかどうかをスキーマレベルで指定します。デフォルトは「DEFAULT EXCLUDE SCHEMA PRIVILEGES」(含めない) でスキーマは作成されます。

CREATE [ … ] TABLE { … } [ { INCLUDE | EXCLUDE } [SCHEMA] PRIVILEGES ];
CREATE [ … ] VIEW { … } [ { INCLUDE | EXCLUDE } [SCHEMA] PRIVILEGES ] { … };

 「INCLUDE」:含める
 「EXCLUDE」:含めない

テーブル/ビューに対してアクセス制御をする場合、スキーマに付与された権限を含めるかどうかを指定します。

【ALTER文】

ALTER DATABASE { … } SET DisableInheritedPrivileges=0;

 「0」:権限継承は有効(デフォルト)
 「1」:権限継承は無効

データベースレベルで指定する場合は「DisableInheritedPrivileges」パラメーターを変更します。

ALTER SCHEMA { … } [ DEFAULT { INCLUDE | EXCLUDE } [SCHEMA] PRIVILEGES ];
ALTER TABLE { … } [ { INCLUDE | EXCLUDE } [SCHEMA] PRIVILEGES ];
ALTER VIEW { … } [ { INCLUDE | EXCLUDE } [SCHEMA] PRIVILEGES ];

 「INCLUDE」:含める
 「EXCLUDE」:含めない

ALTER文でスキーマ/テーブル/ビューの権限管理を変更できます。

実行結果

Vertica7.1とVertica7.2以降の動作は、以下のとおりになります。

【Vertica7.1まで】

user1=> CREATE SCHEMA s1;
CREATE SCHEMA
//user1が 「s1スキーマ」を作成

user1=> GRANT USAGE, CREATE ON SCHEMA s1 to user2;
GRANT PRIVILEGE
//user1がuser2に 「s1スキーマ」の権限付与

user1=> CREATE TABLE s1.t1 (id int);
CREATE TABLE
//user1が 「s1スキーマ」内に 「t1テーブル」を作成

user1=> GRANT select ON table s1.t1 to user2;
GRANT PRIVILEGE
//user1がuser2に 「t1テーブル」の権限付与

user2=> SELECT * FROM s1.t1;
 id
----
(0 rows)
//user2は 「s1スキーマ」内の 「t1テーブル」が参照可能

user1=> CREATE TABLE s1.t2 (id int);
CREATE TABLE
//user1が 「s1スキーマ」内に 「t2テーブル」を新しく作成

user2=> SELECT * FROM s1.t2;
ERROR 4367:  Permission denied for relation t2
//user2は権限不足で 「s1スキーマ」内の 「t2テーブル」が参照不可

user1=> GRANT select ON table s1.t2  to user2;
GRANT PRIVILEGE
//user1がuser2に「t2テーブル」の権限付与

user2=> SELECT * FROM s1.t2;
 id
----
(0 rows)
//user2は 「s1スキーマ」内の 「t2テーブル」が参照可能

【Vertica7.2から】

user1=> CREATE SCHEMA s1 DEFAULT INCLUDE SCHEMA PRIVILEGES;
CREATE SCHEMA
//user1が 「s1スキーマ」作成時に 「INCLUDE SCHEMA PRIVILEGES」を指定

user1=> GRANT USAGE, CREATE, SELECT ON SCHEMA s1 to user2;
GRANT PRIVILEGE
//user1がuser2に 「s1スキーマ」の権限付与

user1=> CREATE TABLE s1.t1 (id int);
WARNING 6978:  Table "t2" will include privileges from schema "s1"
CREATE TABLE
//user1が 「t2テーブル」の作成時に 「s1スキーマ」の権限も含まれると警告

user2=> SELECT * FROM s1.t1;
 id
----
(0 rows)
//user2は 「s1スキーマ」内の 「t1テーブル」が参照可能

参考情報

・権限管理を容易にする方法(ロールについて)
https://www.ashisuto.co.jp/cm/analytics-database/create_role.html

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

検証バージョンについて

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

更新履歴

2019/12/10 【ALTER文】項目の表現を一部修正
2019/04/15 検証バージョンを9.2に変更
2016/05/26 本記事を公開