Eu tenho um usuário encarregado de implantar DDL em outros esquemas que não o seu.
Esse usuário pode criar uma tabela nesses esquemas, também pode criar sequências nesses esquemas.
Mas quando tento criar uma tabela com uma coluna GENERATED IDENTITY nesses esquemas,
o usuário encontra umaORA-01031: privileges insuffisants
Quando este usuário tenta criar a mesma tabela em seu próprio esquema, ele pode fazê-lo corretamente.
Este usuário recebeu os seguintes direitos:
GRANT CREATE ANY SEQUENCE TO ddl_role;
GRANT CREATE ANY TABLE TO ddl_role;
Aqui está um exemplo da consulta executada:
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";
As seguintes consultas funcionam:
CREATE TABLE "sch1"."tab1"
( "col1" NUMBER )
TABLESPACE "sch1_data";
CREATE SEQUENCE "sch1"."seq1";
Referências:
https://oracle-base.com/articles/12c/identity-columns-in-oracle-12cr1
Para criar uma tabela usando o
GENERATED BY...
mecanismo, você também precisa doSELECT ANY SEQUENCE
privilégio, além deCREATE ANY SEQUENCE
.Não sei por que esse é o caso, já que você pode criar uma sequência autônoma. Suspeito que tenha a ver com a configuração do link entre a tabela e a sequência.
Aqui está um exemplo:
E no outro esquema:
Se eu revogar o
SELECT ANY SEQUENCE
privilégio do usuáriopg_test
, a criação da tabela falhará.