我正在尝试授予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
得到
ORA-01924: role 'REFERENCES' not granted or does not exist
(是的,没有角色“ REFERENCES”,但是我不需要新角色,或者我不知道它在这种情况下将如何提供帮助)
也
grant references on testTable to user1
有效,但是我需要能够授予任何表权限,即使是将来将要创建的表也是如此
答案 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>