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

时间:2019-06-25 17:24:58

标签: oracle foreign-keys grant

我正在尝试授予user1权限,以在其他模式中创建(和更改)表。到目前为止,我已经能够创建“简单”表。但是,使用外键创建表时出现错误

我有2个用户/方案的oracle数据库12c。 User1授予在user2模式中创建表的权限:

grant create any table to user1

(好的,可能不是最好的解决方案,但现在没有关系)

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

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

我一直在尝试

grant references to user1

question

的解决方案

得到

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

(是的,没有角色“ REFERENCES”,但是我不需要新角色,或者我不知道它在这种情况下将如何提供帮助)

grant references on testTable to user1

有效,但是我需要能够授予任何表权限,即使是将来将要创建的表也是如此

1 个答案:

答案 0 :(得分:2)

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

您可以做的是授予“创建任何表”权限,首先创建该表,然后“更改任何表”,以将外键约束添加到另一个用户的表中。

在下面的示例中请注意,user1仍需要对user2的表具有显式引用特权,才能对其具有外键。

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>