Oracle&の作成ALL_USERS(username)への参照
-
27-10-2019 - |
質問
したがって、従業員のテーブル(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_USERS
と USER$
どちらもシステムテーブル/ビューです。それらは、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;