我以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上添加此约束是不可能的?
答案 0 :(得分:1)
首先,绝不应该向用户授予ALL PRIVILEGES
,特别是WITH ADMIN OPTION
。这只是管理安全性的一种糟糕方式。在接近真实系统的任何事情中,您都希望确定实际需要哪些特权,并仅授予这些特权。
其次,为了使模式BB
中的外键引用AA
中的父表,BB
必须在{父}中具有REFERENCE
特权{ {1}}。由于没有AA
系统权限,因此在创建表之后但在创建外键之前,您需要在REFERENCE ANY TABLE
上授予BB
REFERENCE
权限。
AA.A_TABLE