4. 監査ログを見てみる#
前セクションでは、2つの異なるIAMユーザー(iamuser-hr-admin-01 と iamuser-hr-dev-01)が、Database側では単一のグローバルユーザー(DBUSER_IAM)として扱われることを確認しました。
この設計では、「誰が操作したか」を後から追跡できるかが重要になります。 そこで、このセクションでは、Oracle Databaseの統合監査(Unified Auditing)を使用して、操作を行ったユーザーを特定できるかを確認します。
統合監査の設定#
現在、統合監査が有効になっていること、および現在有効な監査ポリシーを確認します。
統合監査の事前確認#
まずは統合監査が有効化になっているかを確認します。何も操作していなければ、デフォルトで TRUE となっているはずです。
SQL> select * from V$OPTION where PARAMETER = 'Unified Auditing';
PARAMETER VALUE CON_ID
________________ _____ ______
Unified Auditing TRUE 0
現在有効な監査ポリシーを確認します。
SQL> select POLICY_NAME, ENABLED_OPTION, ENTITY_NAME from AUDIT_UNIFIED_ENABLED_POLICIES;
POLICY_NAME ENABLED_OPTION ENTITY_NAME
______________________________ ______________ ________________
ADB_ADMIN_AUDIT EXCEPT USER SYS
ADB_PARURL_ACCESS_AUDIT BY USER C##CLOUD$SERVICE
ADB_ADMIN_AUDIT EXCEPT USER C##CLOUD$SERVICE
ORA_LOGON_FAILURES BY USER ALL USERS
ADB_PARURL_PKG_ACCESS_AUDIT BY USER ALL USERS
ORA$DICTIONARY_SENS_COL_ACCESS BY USER ALL USERS
ORA$DICTIONARY_SNET_RPC_ACCESS BY USER ALL USERS
COMMON_USER_LOGONS BY USER SYS
COMMON_USER_LOGONS BY USER PUBLIC
COMMON_USER_LOGONS BY USER SYSBACKUP
10 rows selected.
統合監査ポリシーの作成#
すべてSQLアクションを補足する監査ポリシーを作成します。
SQL> CREATE AUDIT POLICY audit_all_actions ACTIONS ALL;
Audit POLICY created.
作成したポリシーをターゲットユーザーである DBUSER_IAM に適用します。これで DBUSER_IAM ユーザーの行動を監査できるようになりました。
SQL> audit policy audit_all_actions by DBUSER_IAM;
Audit succeeded.
-- DBUSER_IAM ユーザーに対して有効になっているかを確認する
SQL> select POLICY_NAME, ENABLED_OPTION, ENTITY_NAME from AUDIT_UNIFIED_ENABLED_POLICIES;
POLICY_NAME ENABLED_OPTION ENTITY_NAME
______________________________ ______________ ________________
ADB_ADMIN_AUDIT EXCEPT USER SYS
ADB_PARURL_ACCESS_AUDIT BY USER C##CLOUD$SERVICE
ADB_ADMIN_AUDIT EXCEPT USER C##CLOUD$SERVICE
AUDIT_ALL_ACTIONS BY USER DBUSER_IAM
ORA_LOGON_FAILURES BY USER ALL USERS
ADB_PARURL_PKG_ACCESS_AUDIT BY USER ALL USERS
ORA$DICTIONARY_SENS_COL_ACCESS BY USER ALL USERS
ORA$DICTIONARY_SNET_RPC_ACCESS BY USER ALL USERS
COMMON_USER_LOGONS BY USER SYS
COMMON_USER_LOGONS BY USER PUBLIC
COMMON_USER_LOGONS BY USER SYSBACKUP
監査ログの確認#
前セクションで実施した AdminユーザーやDevユーザーの操作(接続、テーブル作成など)を行った後、監査ログを取得します。
UNIFIED_AUDIT_TRAIL ビューから、 DBUSER_IAM の操作ログを取得し、特に EXTERNAL_USERID の値に注目して確認します。
次のコマンドで直近の監査ログを20行取得します。
select EVENT_TIMESTAMP_UTC, ACTION_NAME, DBUSERNAME, EXTERNAL_USERID, CLIENT_IDENTIFIER, USERHOST, OS_USERNAME, CLIENT_PROGRAM_NAME, SESSIONID, RETURN_CODE, SQL_TEXT
from UNIFIED_AUDIT_TRAIL
where DBUSERNAME = 'DBUSER_IAM'
order by EVENT_TIMESTAMP_UTC desc
fetch first 20 ROWS ONLY;
SQL> select
2 EVENT_TIMESTAMP_UTC,
3 ACTION_NAME,
4 DBUSERNAME,
5 EXTERNAL_USERID,
6 CLIENT_IDENTIFIER,
7 USERHOST,
8 OS_USERNAME,
9 CLIENT_PROGRAM_NAME,
10 SESSIONID,
11 RETURN_CODE,
12 SQL_TEXT
13 from
14 UNIFIED_AUDIT_TRAIL
15 where
16 DBUSERNAME = 'DBUSER_IAM'
17 order by
18 EVENT_TIMESTAMP_UTC desc
19* fetch first 20 ROWS ONLY;
EVENT_TIMESTAMP_UTC ACTION_NAME DBUSERNAME EXTERNAL_USERID CLIENT_IDENTIFIER USERHOST OS_USERNAME CLIENT_PROGRAM_NAME SESSIONID RETURN_CODE SQL_TEXT
_______________________________ ___________ __________ ____________________________________________________________________________ _________________ ________ ___________ ___________________ ____________________ ___________ ________________________________________________________________________________
10-NOV-25 08.02.42.490882000 AM LOGOFF DBUSER_IAM ocid1.user.oc1..aaaaaaaarojkl3cvp2yawyhip7to6txdbevd3jrzkgtubkr2wsicxxm2vgna edge-dev ubuntu SQLcl 16620439162436382782 0
10-NOV-25 08.02.21.408382000 AM EXECUTE DBUSER_IAM ocid1.user.oc1..aaaaaaaarojkl3cvp2yawyhip7to6txdbevd3jrzkgtubkr2wsicxxm2vgna edge-dev ubuntu SQLcl 16620439162436382782 0 DECLARE
CHECKONE VARCHAR2(1000):=NULL;
BEGIN
BEGIN
CHECKONE:=substr(SYS_
10-NOV-25 07.58.45.434648000 AM EXECUTE DBUSER_IAM ocid1.user.oc1..aaaaaaaarojkl3cvp2yawyhip7to6txdbevd3jrzkgtubkr2wsicxxm2vgna edge-dev ubuntu SQLcl 16620439162436382782 0 DECLARE
CHECKONE VARCHAR2(1000):=NULL;
BEGIN
BEGIN
CHECKONE:=USER;
EXC
10-NOV-25 07.58.41.378117000 AM SELECT DBUSER_IAM ocid1.user.oc1..aaaaaaaarojkl3cvp2yawyhip7to6txdbevd3jrzkgtubkr2wsicxxm2vgna edge-dev ubuntu SQLcl 16620439162436382782 2004 select INITCAP(TO_CHAR(last_login ,'DY MON DD YYYY HH24:MI:SS TZH:TZM')) from db
10-NOV-25 07.58.41.377238000 AM SELECT DBUSER_IAM ocid1.user.oc1..aaaaaaaarojkl3cvp2yawyhip7to6txdbevd3jrzkgtubkr2wsicxxm2vgna edge-dev ubuntu SQLcl 16620439162436382782 2004 select INITCAP(TO_CHAR(last_login ,'DY MON DD YYYY HH24:MI:SS TZH:TZM')) from db
10-NOV-25 07.58.41.376377000 AM SELECT DBUSER_IAM ocid1.user.oc1..aaaaaaaarojkl3cvp2yawyhip7to6txdbevd3jrzkgtubkr2wsicxxm2vgna edge-dev ubuntu SQLcl 16620439162436382782 2004 select INITCAP(TO_CHAR(last_login ,'DY MON DD YYYY HH24:MI:SS TZH:TZM')) from db
10-NOV-25 07.58.41.375499000 AM SELECT DBUSER_IAM ocid1.user.oc1..aaaaaaaarojkl3cvp2yawyhip7to6txdbevd3jrzkgtubkr2wsicxxm2vgna edge-dev ubuntu SQLcl 16620439162436382782 2004 select INITCAP(TO_CHAR(last_login ,'DY MON DD YYYY HH24:MI:SS TZH:TZM')) from db
10-NOV-25 07.58.41.374631000 AM SELECT DBUSER_IAM ocid1.user.oc1..aaaaaaaarojkl3cvp2yawyhip7to6txdbevd3jrzkgtubkr2wsicxxm2vgna edge-dev ubuntu SQLcl 16620439162436382782 2004 select INITCAP(TO_CHAR(last_login ,'DY MON DD YYYY HH24:MI:SS TZH:TZM')) from db
10-NOV-25 07.58.41.373752000 AM SELECT DBUSER_IAM ocid1.user.oc1..aaaaaaaarojkl3cvp2yawyhip7to6txdbevd3jrzkgtubkr2wsicxxm2vgna edge-dev ubuntu SQLcl 16620439162436382782 2004 select INITCAP(TO_CHAR(last_login ,'DY MON DD YYYY HH24:MI:SS TZH:TZM')) from db
10-NOV-25 07.58.41.372846000 AM SELECT DBUSER_IAM ocid1.user.oc1..aaaaaaaarojkl3cvp2yawyhip7to6txdbevd3jrzkgtubkr2wsicxxm2vgna edge-dev ubuntu SQLcl 16620439162436382782 2004 select INITCAP(TO_CHAR(last_login ,'DY MON DD YYYY HH24:MI:SS TZH:TZM')) from db
10-NOV-25 07.58.41.371867000 AM SELECT DBUSER_IAM ocid1.user.oc1..aaaaaaaarojkl3cvp2yawyhip7to6txdbevd3jrzkgtubkr2wsicxxm2vgna edge-dev ubuntu SQLcl 16620439162436382782 2004 select INITCAP(TO_CHAR(last_login ,'DY MON DD YYYY HH24:MI:SS TZH:TZM')) from db
10-NOV-25 07.58.41.363708000 AM SELECT DBUSER_IAM ocid1.user.oc1..aaaaaaaarojkl3cvp2yawyhip7to6txdbevd3jrzkgtubkr2wsicxxm2vgna edge-dev ubuntu SQLcl 16620439162436382782 2004 select INITCAP(TO_CHAR(last_login ,'DY MON DD YYYY HH24:MI:SS TZH:TZM')) from db
10-NOV-25 07.58.41.362776000 AM SELECT DBUSER_IAM ocid1.user.oc1..aaaaaaaarojkl3cvp2yawyhip7to6txdbevd3jrzkgtubkr2wsicxxm2vgna edge-dev ubuntu SQLcl 16620439162436382782 2004 select INITCAP(TO_CHAR(last_login ,'DY MON DD YYYY HH24:MI:SS TZH:TZM')) from db
10-NOV-25 07.58.41.361888000 AM SELECT DBUSER_IAM ocid1.user.oc1..aaaaaaaarojkl3cvp2yawyhip7to6txdbevd3jrzkgtubkr2wsicxxm2vgna edge-dev ubuntu SQLcl 16620439162436382782 2004 select INITCAP(TO_CHAR(last_login ,'DY MON DD YYYY HH24:MI:SS TZH:TZM')) from db
10-NOV-25 07.58.41.361020000 AM SELECT DBUSER_IAM ocid1.user.oc1..aaaaaaaarojkl3cvp2yawyhip7to6txdbevd3jrzkgtubkr2wsicxxm2vgna edge-dev ubuntu SQLcl 16620439162436382782 2004 select INITCAP(TO_CHAR(last_login ,'DY MON DD YYYY HH24:MI:SS TZH:TZM')) from db
10-NOV-25 07.58.41.360132000 AM SELECT DBUSER_IAM ocid1.user.oc1..aaaaaaaarojkl3cvp2yawyhip7to6txdbevd3jrzkgtubkr2wsicxxm2vgna edge-dev ubuntu SQLcl 16620439162436382782 2004 select INITCAP(TO_CHAR(last_login ,'DY MON DD YYYY HH24:MI:SS TZH:TZM')) from db
10-NOV-25 07.58.41.359275000 AM SELECT DBUSER_IAM ocid1.user.oc1..aaaaaaaarojkl3cvp2yawyhip7to6txdbevd3jrzkgtubkr2wsicxxm2vgna edge-dev ubuntu SQLcl 16620439162436382782 2004 select INITCAP(TO_CHAR(last_login ,'DY MON DD YYYY HH24:MI:SS TZH:TZM')) from db
10-NOV-25 07.58.41.358373000 AM SELECT DBUSER_IAM ocid1.user.oc1..aaaaaaaarojkl3cvp2yawyhip7to6txdbevd3jrzkgtubkr2wsicxxm2vgna edge-dev ubuntu SQLcl 16620439162436382782 2004 select INITCAP(TO_CHAR(last_login ,'DY MON DD YYYY HH24:MI:SS TZH:TZM')) from db
10-NOV-25 07.58.41.357498000 AM SELECT DBUSER_IAM ocid1.user.oc1..aaaaaaaarojkl3cvp2yawyhip7to6txdbevd3jrzkgtubkr2wsicxxm2vgna edge-dev ubuntu SQLcl 16620439162436382782 2004 select INITCAP(TO_CHAR(last_login ,'DY MON DD YYYY HH24:MI:SS TZH:TZM')) from db
10-NOV-25 07.58.41.356631000 AM SELECT DBUSER_IAM ocid1.user.oc1..aaaaaaaarojkl3cvp2yawyhip7to6txdbevd3jrzkgtubkr2wsicxxm2vgna edge-dev ubuntu SQLcl 16620439162436382782 2004 select INITCAP(TO_CHAR(last_login ,'DY MON DD YYYY HH24:MI:SS TZH:TZM')) from db
20 rows selected.
このように、 EXTERNAL_USERID 列に使用したOCI IAMユーザーのOCIDが記録されるため、この情報を利用して、操作した人間を特定することができます。
したがって、グローバルユーザーとしてマッピングされた場合でも、Oracle Databaseの統合監査機能を使用することで、「誰が」その操作を行ったかを追跡することが可能です。
これで OCI IAM の DBパスワードを使用したアクセス方法についてのチュートリアル手順は終了です。