在不同所有者之间添加FOREIGN KEY CONSTRAINT

时间:2012-10-04 19:59:54

标签: oracle-xe

我以SYSTEM用户身份登录Oracle XE实例。当我尝试运行创建用户,表和约束的脚本时,出现ORA-01031错误。脚本如下:

CREATE USER AA IDENTIFIED BY AA DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;
CREATE USER BB IDENTIFIED BY BB DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;
GRANT ALL PRIVILEGES TO AA WITH ADMIN OPTION;
GRANT ALL PRIVILEGES TO BB WITH ADMIN OPTION;
...
CREATE TABLE ...
CREATE INDEX ...
...
ALTER TABLE "BB"."B_TABLE" ADD CONSTRAINT "FK_BB_AA" FOREIGN KEY ("AA_ID")
  REFERENCES "AA"."A_TABLE" ("ID") ENABLE; -- this line report the error

在Oracle XE上添加此约束是不可能的?

1 个答案:

答案 0 :(得分:1)

首先,绝不应该向用户授予ALL PRIVILEGES,特别是WITH ADMIN OPTION。这只是管理安全性的一种糟糕方式。在接近真实系统的任何事情中,您都希望确定实际需要哪些特权,并仅授予这些特权。

其次,为了使模式BB中的外键引用AA中的父表,BB必须在{父}中具有REFERENCE特权{ {1}}。由于没有AA系统权限,因此在创建表之后但在创建外键之前,您需要在REFERENCE ANY TABLE上授予BB REFERENCE权限。

AA.A_TABLE