Oracle
授予在另一個架構上創建具有標識列的表的權限
我有一個使用者負責在自己的模式之外的其他模式上部署 DDL。
該使用者可以在這些模式上創建一個表,它還可以在這些模式上創建序列。
但是當我嘗試在這些模式上創建一個帶有 GENERATED IDENTITY 列的表時,
使用者會遇到一個
ORA-01031: privileges insuffisants
當這個使用者在自己的模式上嘗試相同的創建表時,他可以正確地做到這一點。
該使用者被授予以下權限:
GRANT CREATE ANY SEQUENCE TO ddl_role; GRANT CREATE ANY TABLE TO ddl_role;
這是執行的查詢範例:
CREATE TABLE "sch1"."tab1" ( "col1" NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY MINVALUE 1 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE NOKEEP NOSCALE) TABLESPACE "sch1_data";
以下查詢有效:
CREATE TABLE "sch1"."tab1" ( "col1" NUMBER ) TABLESPACE "sch1_data"; CREATE SEQUENCE "sch1"."seq1";
參考:
https ://oracle-base.com/articles/12c/identity-columns-in-oracle-12cr1
為了使用該
GENERATED BY...
機制創建表,您還需要SELECT ANY SEQUENCE
特權,除了CREATE ANY SEQUENCE
.我不知道為什麼會這樣,因為您可以創建一個獨立的序列。我懷疑這與建立表和序列之間的連結有關。
這是一個例子:
SQL> connect pg_test/pg_test@graphdb Connected. SQL> select privilege from user_sys_privs; PRIVILEGE ------------------------------------------------------------------------------- CREATE ANY TABLE CREATE SESSION CREATE ANY SEQUENCE SELECT ANY SEQUENCE ALTER SESSION 5 rows selected. SQL> create table scott.t1 (i number GENERATED BY DEFAULT ON NULL AS IDENTITY); Table created.
在另一個模式中:
SQL> connect scott/tiger@graphdb Connected. SQL> select * from cat; TABLE_NAME TABLE_TYPE ------------------------------ --------------------------------- ... T1 TABLE ISEQ$$_81682 SEQUENCE 50 rows selected.
如果我撤銷
SELECT ANY SEQUENCE
使用者的權限,pg_test
則表創建將失敗。