はじめに
テーブルを現在のスキーマから別のスキーマに移動する場合は、別のスキーマに権限継承(*1) が設定されていても、移動したテーブル(*2) には権限が付与されません。権限が付与されるのは、新規に作成したテーブルが対象です。移動したテーブルに対しては、あらためて権限継承の設定が必要なのでご注意ください。(*1) 権限継承の詳細については、以下の記事をご参照ください。
・新規にテーブルを作成した場合の権限管理 (7.2新機能)
http://vertica-tech.ashisuto.co.jp/schema_privileges/
・新規テーブル/ビュー作成時の権限継承の制御方法
http://vertica-tech.ashisuto.co.jp/exclude_privileges/
(*2) テーブル以外にビューも対象です。
権限継承の設定方法
構文
別のスキーマに移動後、権限継承を設定する場合の構文です。
1 2 |
ALTER TABLE <スキーマ名>.<テーブル名> INCLUDE SCHEMA PRIVILEGES; ALTER VIEW <スキーマ名>.<ビュー名> INCLUDE SCHEMA PRIVILEGES; |
実行例
publicスキーマで作成したt2テーブルをsスキーマに移動した場合の実行例です。
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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# 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テーブルは参照可能になりました。 |
参考情報
・テーブルを別のスキーマに移動する方法http://vertica-tech.ashisuto.co.jp/alter_table_set_schema/
・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