我有一个用户负责在自己的模式之外的其他模式上部署 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
.我不知道为什么会这样,因为您可以创建一个独立的序列。我怀疑这与建立表和序列之间的链接有关。
这是一个例子:
在另一个模式中:
如果我撤销
SELECT ANY SEQUENCE
用户的权限,pg_test
则表创建将失败。