OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

権限継承が設定されているスキーマにテーブルを移動する場合の注意点

公開日:
更新日:
基本操作
#スキーマ
#権限

はじめに

テーブルを現在のスキーマから別のスキーマに移動する場合は、別のスキーマに権限継承(*1) が設定されていても、移動したテーブル(*2) には権限が付与されません。権限が付与されるのは、新規に作成したテーブルが対象です。移動したテーブルに対しては、あらためて権限継承の設定が必要なのでご注意ください。

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

・新規テーブル/ビュー作成時の権限継承の制御方法
https://www.ashisuto.co.jp/cm/analytics-database/exclude_privileges.html

(*2) テーブル以外にビューも対象です。

権限継承の設定方法

構文

別のスキーマに移動後、権限継承を設定する場合の構文です。

ALTER TABLE <スキーマ名>.<テーブル名> INCLUDE SCHEMA PRIVILEGES;
ALTER VIEW  <スキーマ名>.<ビュー名>   INCLUDE SCHEMA PRIVILEGES;

実行例

publicスキーマで作成したt2テーブルをsスキーマに移動した場合の実行例です。

# u_testユーザーの作成
dbadmin=> CREATE USER u_test;
CREATE USER

# sスキーマを権限継承に設定して作成
dbadmin=> CREATE SCHEMA s DEFAULT INCLUDE PRIVILEGES;
CREATE SCHEMA

# sスキーマに権限付与し、u_testに割当て
dbadmin=> GRANT USAGE, CREATE, SELECT, INSERT ON SCHEMA s TO u_test;
GRANT PRIVILEGE

# s.t1テーブルの作成
dbadmin=> CREATE TABLE s.t1 (c INT);
WARNING 6978:  Table "t1" will include privileges from schema "s"
CREATE TABLE

# u_testユーザで接続
dbadmin=> \c - u_test
You are now connected as user "u_test".

# s.t1テーブルの参照
dbadmin=> SELECT * FROM s.t1;
 c
---
(0 rows)
※s.t1テーブルは参照可能です。

# dbadminユーザーで接続
dbadmin=> \c - dbadmin
Password:
You are now connected as user "dbadmin".

# public.t2テーブルの作成
dbadmin=> CREATE TABLE public.t2 (c INT);
CREATE TABLE

# publicスキーマのt2テーブルをsスキーマに移動
dbadmin=> ALTER TABLE public.t2 SET SCHEMA s;
ALTER TABLE

# u_testユーザーで接続
dbadmin=> \c - u_test
You are now connected as user "u_test".

# s.t2テーブルの参照
dbadmin=> SELECT * FROM s.t2;
ERROR 4367:  Permission denied for relation t2
※s.t2テーブルは参照不可です。

# dbadminユーザーで接続
dbadmin=> \c - dbadmin
Password:
You are now connected as user "dbadmin".

# s.t2テーブルに権限継承を設定
dbadmin=> ALTER TABLE s.t2 INCLUDE SCHEMA PRIVILEGES;
ALTER TABLE

# u_testユーザーで接続
dbadmin=> \c - u_test
You are now connected as user "u_test".

# s.t2テーブルの参照
dbadmin=> SELECT * FROM s.t2;
 c
---
(0 rows)
★s.t2テーブルは参照可能になりました。

参考情報

・テーブルを別のスキーマに移動する方法
https://www.ashisuto.co.jp/cm/analytics-database/alter_table_set_schema.html

・Moving Tables to Another Schema
https://www.vertica.com/docs/9.3.x/HTML/Content/Authoring/AdministratorsGuide/Tables/ModifyTableDefinition/MovingATableToAnotherSchema.htm

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

検証バージョンについて

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

更新履歴

2020/02/18 本記事を公開