質問

したがって、従業員のテーブル(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を見つけることができないことがわかります...とにかくこの種の参照を行うにはどうすればよいですか?

役に立ちましたか?

解決

ALL_USERSUSER$ どちらもシステムテーブル/ビューです。それらは、Oracle自体によって低レベルで維持されています。これらの制約を実施するには低すぎるレベルで。あなたは自分がやろうとしていることをすることができません。

(このように考えてください:あなたがしようとした場合はどうなりますか DROP USER bob? Oracleが外部のキーの制約を実施することを期待していますか?ユーザーのテーブルスペースがオフラインである場合はどうなりますか?)

編集:ユーザー名で外部キーを除外することをお勧めします。ユーザーを比較するために仕事をスケジュールすることをお勧めします Mapping_Employee_User vs。 DBA_USERS それらが同期し続けることを確認するため。または、たとえばLDAPでOracleユーザーを管理することもできます(これは可能です)。

他のヒント

All_usersはビューであり、テーブル自体ではありません。

grant select on all_users to USERNAME;

十分である必要があります。まだORA-01031を取得している場合、それはおそらくユーザーが作成テーブルの特権を持っていないためです:

grant create table to USERNAME;

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top