OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

新規テーブル/ビュー作成時の権限継承の制御方法

公開日:
更新日:
基本操作
セキュリティ
#テーブル
#View
#権限

はじめに

通常、新規にテーブル/ビューを作成する際、スキーマに付与されている権限が継承(※)されます。

例えば、スキーマに権限継承の設定がされていれば、そのスキーマに作成される新規テーブル/ビューに対して全てのスキーマ権限が継承されます。
スキーマに権限継承の設定がされていなければ、新規テーブル/ビューに対してスキーマ権限は継承されません。

ただし、CREATE TABLE/VIEWコマンドにオプション指定することにより、作成時に権限継承させるか否かを制御できます。
今回はオプションの指定方法とその動作を紹介いたします。

(※)権限継承の設定については、以下の記事をご参照ください。
新規にテーブルを作成した場合の権限管理 (7.2新機能)
https://www.ashisuto.co.jp/cm/analytics-database/schema_privileges.html

構文

CREATE TABLE [[データベース名.]スキーマ名.]テーブル名(列定義) [ EXCLUDE/INCLUDE PRIVILEGES ]

EXCLUDE・・・スキーマ権限を継承しない
INCLUDE・・・スキーマ権限を継承する

次に2つのパターンを例に、オプションの使い方をご案内します。

パターン1:スキーマに権限継承の設定がされていない場合

概要

権限継承の設定をせずにスキーマを作成します。
通常、このスキーマに新規作成されるテーブル/ビューにはスキーマ権限は継承されませんが、
INCLUDE PRIVILEGESオプションを指定することで、作成時の指定により継承させられることを確認します。

詳細

①権限継承の設定を行わずにs1スキーマを作成します。

dbadmin=> CREATE SCHEMA s1;
CREATE SCHEMA

②user1ユーザーを作成し、権限付与します。

dbadmin=> CREATE USER user1;
CREATE USER

dbadmin=> GRANT USAGE, SELECT ON SCHEMA s1 TO user1;
GRANT PRIVILEGE

③権限検証に関するオプションを指定せずに t1 テーブルを作成します。

dbadmin=> CREATE TABLE s1.t1(col1 int);
CREATE TABLE

スキーマ作成時に権限継承に関するオプションを指定をしなかった場合、「DEFAULT EXCLUDE SCHEMA PRIVILEGES」がデフォルトで設定されます。

④user1ユーザーにログインし、t1テーブルが参照できないことを確認します。

dbadmin=> \c user1 user1
You are now connected to database "user1" as user "user1".

user1=> \d
No relations found.

user1=> SELECT * FROM s1.t1;
ERROR 4367: Permission denied for relation t1

⑤テーブル作成時、INCLUDE PRIVILEGESオプションを付与します。

user1=> \c dbadmin dbadmin
Password:
You are now connected to database "dbadmin" as user "dbadmin".

dbadmin=> CREATE TABLE s1.t2(col1 int) INCLUDE PRIVILEGES;
CREATE TABLE

⑥t2テーブルが参照可能となっていることを確認します。

dbadmin=> \c user1 user1
You are now connected to database "user1" as user "user1".

user1=> \d
List of tables
Schema | Name | Kind | Owner | Comment
--------+------+-------+---------+---------
s1 | t2 | table | dbadmin |
(1 row)

user1=> SELECT * FROM s1.t2;
col1
------
(0 rows)

パターン2:スキーマに権限継承の設定がされている場合

概要

権限継承の設定をしてスキーマを作成します。
通常、このスキーマに新規作成されるテーブル/ビューにはスキーマ権限が継承されますが、
EXCLUDE PRIVILEGESオプションを指定することで、権限の継承を無効にできることを確認します。

詳細

①権限継承の設定を行い、s2スキーマを作成します。

dbadmin=> CREATE SCHEMA s2 DEFAULT INCLUDE SCHEMA PRIVILEGES;
CREATE SCHEMA

②user2ユーザーを作成し、権限付与します。

dbadmin=> CREATE USER user2;
CREATE USER

dbadmin=> GRANT USAGE, SELECT ON SCHEMA s2 TO user2;
GRANT PRIVILEGE

③権限検証に関するオプションを指定せずに t1 テーブルを作成します。

dbadmin=> CREATE TABLE s2.t1(col1 int);
WARNING 6978: Table "t1" will include privileges from schema "s2"
CREATE TABLE

④user2ユーザーにログインし、t1テーブルが参照可能となっていることを確認します。

dbadmin=> \c user2 user2
You are now connected to database "user2" as user "user2".

user2=> \d
List of tables
Schema | Name | Kind | Owner | Comment
--------+------+-------+---------+---------
s2 | t1 | table | dbadmin |
(1 row)

user2=> SELECT * FROM s2.t1;
col1
------
(0 rows)

⑤テーブル作成時、EXCLUDE PRIVILEGESオプションを付与します。

user2=> \c dbadmin dbadmin
Password:
You are now connected to database "dbadmin" as user "dbadmin".

dbadmin=> CREATE TABLE s2.t2(col1 int) EXCLUDE PRIVILEGES;
CREATE TABLE

⑥t2テーブルが参照できないことを確認します。

dbadmin=> \c user2 user2
You are now connected to database "user2" as user "user2".

user2=> \d
List of tables
Schema | Name | Kind | Owner | Comment
--------+------+-------+---------+---------
s2 | t1 | table | dbadmin |
(1 row)

user2=> SELECT * FROM s2.t2;
ERROR 4367: Permission denied for relation t2

参考情報

新規にテーブルを作成した場合の権限管理 (7.2新機能)
https://www.ashisuto.co.jp/cm/analytics-database/schema_privileges.html

Inherited Privileges
https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/AdministratorsGuide/DBUsersAndPrivileges/Privileges/InheritedPrivilegesOverview.htm

Setting Privileges Inheritance on Tables and Views
https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/AdministratorsGuide/DBUsersAndPrivileges/Privileges/TableViewInheritance.htm

Enabling Database Inheritance
https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/AdministratorsGuide/DBUsersAndPrivileges/Privileges/EnableDatabaseInheritance.htm

検証バージョンについて

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

更新履歴

2019/11/29 本記事を公開