如何在 oracle sql 12.2.0.1.0 中授予引用?

how to grant references in oracle sql 12.2.0.1.0?

我正在尝试授予 user1 在其他模式中创建(和更改)table 的权限。到目前为止,我已经能够创建 "simple" tables。但是当使用外键创建 tables 时出现错误

我有 oracle 数据库 12c 和 2 users/schemas。 User1 授予在 user2 架构中创建 tables 的权限:

grant create any table to user1

(好吧,可能不是最好的解决方案,但现在不重要)

现在,当我尝试使用外键创建 table 时,我收到标准消息

Error: ORA-01031: insufficient privileges [Failed SQL: create table…

我一直在努力

grant references to user1

来自这个

的解决方案

得到

ORA-01924: role 'REFERENCES' not granted or does not exist

(好的,这是真的,没有角色 'REFERENCES' 但我不需要新角色,或者我不明白它在这种情况下会有什么帮助)

还有

grant references on testTable to user1

有效,但我需要能够向任何 table 授予权限,即使对于那些将在未来创建的

Oracle 中没有系统权限"REFERENCE ANY TABLE"。 https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/GRANT.html#GUID-20B4E2C0-A7F8-4BC8-A5E8-BE61BDC41AC3

你可以做的是授予 "create any table" 首先创建 table 然后 "alter any table" 将外键约束添加到另一个用户的 table.

请注意,在下面的示例中,用户 1 仍然需要对用户 2 的 table 的显式引用权限才能拥有它的外键。

FSITJA@db01 2019-06-25 11:43:14> create user user1 identified by 123 quota unlimited on users;

User created.

FSITJA@db01 2019-06-25 11:43:14> grant create session to user1;

Grant succeeded.

FSITJA@db01 2019-06-25 11:43:14> grant create any table, create any index, alter any table to user1;

Grant succeeded.

FSITJA@db01 2019-06-25 11:43:14> create user user2 identified by 123 quota unlimited on users;

User created.

FSITJA@db01 2019-06-25 11:43:14> conn user1/123@db01
Connected.

Session altered.

USER1@db01 2019-06-25 11:43:15> create table user2.t1(col1 number primary key);

Table created.

USER1@db01 2019-06-25 11:43:15> create table user2.t2(col1 number);

Table created.

USER1@db01 2019-06-25 11:43:15> alter table user2.t2 add constraint fk_t2_t1 foreign key (col1) references user2.t1(col1)
;

Table altered.

USER1@db01 2019-06-25 11:43:15> create table user1.t3(col1 number);

Table created.

USER1@db01 2019-06-25 11:43:15> alter table user1.t3 add constraint fk_t3_51 foreign key (col1) references user2.t1(col1)
;
alter table user1.t3 add constraint fk_t3_51 foreign key (col1) references user2.t1(col1)
                                                                                 *
ERROR at line 1:
ORA-01031: insufficient privileges


USER1@db01 2019-06-25 11:43:15> conn user2/123@db01
Connected.

Session altered.

USER2@db01 2019-06-25 11:43:16> grant references on user2.t1 to user1;

Grant succeeded.

USER2@db01 2019-06-25 11:43:16> conn user1/123@db01
Connected.

Session altered.

USER1@db01 2019-06-25 11:43:16> alter table user1.t3 add constraint fk_t3_51 foreign key (col1) references user2.t1(col1)
;

Table altered.

USER1@db01 2019-06-25 11:43:20>