Oracle 12cデータベースに、完全なデータポンプのエクスポートとインポートを実行するために使用されるユーザーがいます。そのユーザーからローカルホストへのログオンを制限したいと思います。
ログオントリガーを作成しようとしました:
create or replace trigger logon_trigger
after logon on database
declare
Host varchar2(50);
begin
Host := trim(lower(sys_context('USERENV', 'Host')));
if lower(user) = '<data pump user>' then
if Host <> '<hostname>' then
raise_application_error(-20000, 'Login not allowed');
end if;
end if;
end;
/
監査証跡から、このトリガーが発生したことがわかります(ORA-20000:ログインは許可されていません)が、ユーザーは引き続きリモートホストからのログオンを許可されています。
この制限は通常のユーザーには機能しますが、データポンプユーザーには機能しません。これは、exp_full_databaseロールとimp_full_databaseロールと関係があると思います。
このトリガーを機能させる方法はありますか、それともローカルOS認証を使用する必要がありますか?
ADMINISTER DATABASE TRIGGER特権により、ログオントリガーがエラーをスキップします(ドキュメントID 265012.1)
ADMINISTER DATABASE TRIGGER Privilege Behavior with Database Logon Trigger
--------------------------------------------------------------------------
Logon triggers can be used to mediate database access: when the restrictive
conditions are not met, an application error with a message is raised that
causes the logon to be denied.
...
However, we need to keep at least one user who can still connect when there is
a problem : a fallback mechanism must exist where an administrative user is
exempt from such errors of a prohibited connection.
Any user granted the ADMINISTER DATABASE TRIGGER system privilege can still
connect : instead of getting the error causing the session to be terminated,
the error is recorded in the alert.log and a trace file in user_dump_dest.
そして:
select * from dba_sys_privs where privilege = 'ADMINISTER DATABASE TRIGGER';
GRANTEE PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
WMSYS ADMINISTER DATABASE TRIGGER NO
DBA ADMINISTER DATABASE TRIGGER YES
SYS ADMINISTER DATABASE TRIGGER NO
IMP_FULL_DATABASE ADMINISTER DATABASE TRIGGER NO
そうです、ローカルOS認証を試すことができます。