はじめに
テーブルを現在のスキーマから別のスキーマに移動する場合は、別のスキーマに権限継承(*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 本記事を公開