2

所以我需要做一个从员工表(idEmployee、姓名等)到创建帐户的真实用户的映射。我决定添加一个表 Mapping_Employee_User(idEmployee, userName) 如下所示

CREATE TABLE Mapping_Employee_User( 
    idEmployee NUMBER(6)
        CONSTRAINT FK_Mapping_Employee_User1 REFERENCES Employee (idEmployee),
    userName VARCHAR2(30 BYTE)
        CONSTRAINT FK_Mapping_Employee_User2 REFERENCES ALL_USERS(USERNAME),
    CONSTRAINT PK_Mapping_Employee_User PRIMARY KEY (idEmployee, userName)
);

但我得到一个“ ORA01031 权限不足原因:试图更改当前的用户名或密码......” 但我实际上并没有这样做,我只是想做一个参考。

注意:我对这个用户拥有完全的权利

记录为 SYS 我可以看到实际的表名为“USER$”,我找不到表 ALL_USERS ......无论如何我该如何做这种参考?

4

2 回答 2

5

ALL_USERS并且USER$都是系统表/视图。Oracle 本身将它们维持在低水平。级别太低而无法强制执行这些约束。你根本无法做你想做的事。

(这样想:如果您尝试这样做会发生DROP USER bob什么?您是否希望 Oracle 强制执行您的外键约束?如果您的用户表空间处于脱机状态会发生什么?)

编辑:我建议你把用户名的外键去掉。您可能需要安排一些工作来比较用户Mapping_Employee_User和用户,DBA_USERS以确保他们保持同步。或者,您可能希望使用 LDAP 管理您的 Oracle 用户(我听说这是可能的)。

于 2011-12-02T21:52:31.150 回答
0

ALL_USERS 是一个视图,而不是一个表。

grant select on all_users to USERNAME;

应该足够了。如果您仍然收到 ORA-01031,可能是因为用户没有 CREATE TABLE 权限:

grant create table to USERNAME;

于 2011-12-02T21:55:08.860 回答