Oracle & делает ссылку на ALL_USERS (USERNAME) - PullRequest
2 голосов
/ 03 декабря 2011

Так что мне нужно сделать сопоставление из таблицы Employee (idEmployee, name и т. Д.) Реальному пользователю с созданной учетной записью.Я решил добавить таблицу 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 ... в любом случаекак мне сделать этот вид ссылки ??

Ответы [ 2 ]

5 голосов
/ 03 декабря 2011

ALL_USERS и USER$ являются системными таблицами / представлениями.Они поддерживаются на низком уровне самой Oracle.На слишком низком уровне, чтобы обеспечить соблюдение этих ограничений.Вы просто не можете делать то, что пытаетесь сделать.

(Подумайте об этом так: что бы произошло, если бы вы попытались DROP USER bob? Ожидаете ли вы, что Oracle введет ограничение вашего внешнего ключа?Что произойдет, если ваше пользовательское табличное пространство находится в автономном режиме?)

edit: я предлагаю вам просто отключить внешний ключ в userName.Возможно, вы захотите запланировать какую-то работу для сравнения пользователей в Mapping_Employee_User с DBA_USERS, чтобы убедиться, что они синхронизированы.В качестве альтернативы вы можете управлять своими пользователями Oracle, например, с помощью LDAP (что, как я слышал, возможно).

0 голосов
/ 03 декабря 2011

ALL_USERS - это представление, а не сама таблица.

grant select on all_users to USERNAME;

должно быть достаточно.если вы все еще получаете ORA-01031, возможно, это связано с тем, что у пользователя нет привилегии CREATE TABLE:

grant create table to USERNAME;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...