在多架构设置方面,我在理解Oracle的可能性和不可能性方面遇到了一些麻烦。假设我有两个架构A
和B
:
-- with user SYS connect as SYSDBA
-- note: ALL PRIVILEGES are granted for simplicity in the scope of this question.
-- real life databases would have more fine-grained grants...
create user A identified by A;
grant all privileges to A;
create user B identified by B;
grant all privileges to B;
-- with user A
create table A.REFERENCED_TABLE (
ID number(7) not null,
constraint REFERENCED_TABLE_PK primary key (ID)
);
-- with user A or B
create table B.REFERENCING_TABLE (
A_ID number(7) not null,
constraint REFERENCING_TABLE_FK
foreign key (A_ID)
references A.REFERENCED_TABLE(ID)
on delete cascade
);
但上述陈述导致
ORA-01031: insufficient privileges
如何从一个模式引用一个表来引用另一个模式的表?还有一些GRANT
仍然缺失吗?这甚至可能吗?
答案 0 :(得分:4)
有两种不同的权限:系统权限&对象私人。
GRANT ALL PRIVILEGES TO user;
会向用户授予所有系统权限,并且应该非常小心地使用!
GRANT ALL ON table TO user;
将对表(即对象)的SELECT,INSERT等授予用户。
所以你需要做一个......
GRANT ALL ON a.referenced_table TO b;
...在CREATE TABLE A.REFERENCED_TABLE语句之后,以上工作。
答案 1 :(得分:3)
对大多数企业环境而言,全部授予太多了。请改用Grant参考。
将schema.tablename的引用授予target_schema或user;