---
title: HeatWavejp_Meetup_13_HeatWave MySQL で DB監査ログ運用を実装してみた！[倉重正義氏 (パナソニック インフォメーションシステムズ)]
tags: 
author: [HeatWavejp](https://convert.docswell.com/user/heatwavejp)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/DJYMXPD8JM.jpg?width=480
description: 【講演内容】 HeatWave MySQL で DB監査運用を実践してみた！  　１．HeatWaveサービス化検証 　２．DBログ監査について 　３．基本的な使い方 　４．DB監査ログ利用時の注意点 　５．DBログ監査の外部保管 　６．外部保管DB監査ログの参照まとめ 　７．  【発表者】 パナソニック インフォメーションシステムズ株式会社 インフラソリューション 本部 プラットフォームサービス事業部 インフラ標準サービス部 DB基盤チーム 倉重 正義氏  【イベント情報】 HeatWavejp Meetup #13 https://heatwavejp.connpass.com/even/349599/
published: May 07, 25
canonical: https://convert.docswell.com/s/heatwavejp/ZEXD96-2025-05-07-115840
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/DJYMXPD8JM.jpg)

HeatWavejp Meetup #13
HeatWave MySQL でDB監査ログ運用を実装してみた！
パナソニック インフォメーションシステムズ株式会社
Panasonic Information Systems Co., Ltd.
Copyright（C） Panasonic Information Systems Co., Ltd. All rights reserved.


# Page. 2

![Page Image](https://bcdn.docswell.com/page/V7NW156978.jpg)

自己紹介
氏名：倉重 正義
所属：パナソニック インフォメーションシステムズ株式会社
業務：データベース構築・運用
（Oracle, MySQL, PostgreSQL, SQL Server）
Panasonic Information Systems Co., Ltd.
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/YJ9X5YL3E3.jpg)

事業領域
Panasonic Information Systems Co., Ltd.
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/GJ82Y6XLJD.jpg)

Panasonic Transformation（PX） とは
各事業のDX支援と
グループ全体のIT経営基盤の底上げ
事業の競争力強化に向けて
働き方・ビジネスのやり方含めて変革
経営のスピードアップ目指す
2021年 5月 PX準備プロジェクト発足
Panasonic Information Systems Co., Ltd.
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/LJL2498QER.jpg)

アジェンダ
１．HeatWaveサービス化検証
２．DB監査ログについて
３．基本的な使い方
４．DB監査ログ利用時の注意点
５．DB監査ログの外部保管
６．外部保管DB監査ログの参照
７．まとめ
Panasonic Information Systems Co., Ltd.
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/47M8KZXK7W.jpg)

１．HeatWaveサービス化検証
パナソニックグループ向けHeatWaveのサービス提供に向け検証
今回はDB監査ログ運用について検証した内容を発表
パフォーマンス
運用評価
可用性
（メンテナンスなど）
クラウド上で
セキュリティー
他システム連携
NWレイテンシ
SLAが満たせるか
基準評価
（オンプレ連携など）
影響調査
コスト評価
HeatWave独自機能
（機械学習・生成AIなど）
Panasonic Information Systems Co., Ltd.
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/P7R5X6N6J9.jpg)

２．DB監査ログについて
セキュリティ関連の機能の１つでDB内での操作を記録するもの。
重要なシステムを運用する上で、重要な役割を果たす。
HeatWaveでは、MySQL Enterprise Audit にてDB監査ログ取得が可能
重要テーブルへの
アクセス検知
SOX(内部統制）証跡
監査ログ出力内容
・いつ（日時）
DB監査ログ
・どこで（接続元端末）
・誰が（DBユーザ）
・何をした（発行クエリなど）
インシデント発生時の
調査
Panasonic Information Systems Co., Ltd.
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/PJXK6MND7X.jpg)

３．基本的な使い方
デフォルトでは監査ログ出力されない。監査ログを出力する為の設定が必要。
■監査ログ設定
①ログフィルタ作成
どの操作をログ出力するか設定
②ログフィルタ割当
DBユーザに作成したログフィルタを割当
②ログフィルタ割当
①ログフィルタ作成
監査ログ出力
ログフィルタ
DBユーザ
■監査ログ設定後
③ログ参照
ログ参照ファンクション経由で監査ログ参照
※監査ログファイルへの直接参照不可
監査ログファイル（JSON形式）
③ログ参照
DBユーザ
ログ参照ファンクション
Panasonic Information Systems Co., Ltd.
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/3JK51GND7D.jpg)

３．基本的な使い方 ー ①ログフィルタ設定
どの操作を監査ログを出力するか設定。フィルタ設定内容はJSON形式で指定。
SELECT audit_log_filter_set_filter(‘ログフィルタ名’, ‘{“filter”: {フィルタ設定}}’);
例）すべての操作の監査ログ出力をしたい場合
SELECT audit_log_filter_set_filter(&#039;log_all&#039;, &#039;{&quot;filter&quot;: {&quot;log&quot;:true}}’);
例）特定クラスの監査ログ出力したい場合
SELECT audit_log_filter_set_filter(&#039;log_conn_events&#039;,&#039;{ &quot;filter&quot;: { &quot;class&quot;: { &quot;name&quot;: &quot;connection&quot; } } }’);
設定したフィルタは下記クエリで確認可能
SELECT * FROM mysql_audit.audit_log_filter;
Panasonic Information Systems Co., Ltd.
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/LE3KQNVPE5.jpg)

３．基本的な使い方 ー ①ログフィルタ設定
■イベント、イベントサブクラス
イベントクラス
イベントサブクラス
説明
connection
connect
接続の開始
connection
change_user
ユーザ切替
connection
disconnect
接続の終了
general
status
コマンドの戻り値
message
internal
内部で生成されたメッセージ
message
user
audit_api_message_emit_udf に生成されたメッセージ
table_access
read
データ参照SQL
table_access
delete
データ削除SQL
table_access
insert
データ挿入SQL
table_access
update
データ更新SQL
【参考】
https://dev.mysql.com/doc/refman/8.0/ja/audit-log-filter-definitions.html
Panasonic Information Systems Co., Ltd.
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/8ED39W837G.jpg)

３．基本的な使い方 ー ②ログフィルタ割当
①で作成したログフィルタをDBユーザに割当
SELECT audit_log_filter_set_user(‘DBユーザ名’, ‘ログフィルタ名’);
例）すべてのユーザにフィルタを割当する場合
SELECT audit_log_filter_set_user(&#039;%&#039;, &#039;log_all’);
例）特定ユーザにフィルタ割当する場合
SELECT audit_log_filter_set_user(&#039;user_abc@%&#039;, &#039;log_all’);
設定内容は下記クエリで確認可能
SELECT * FROM mysql_audit.audit_log_user;
Panasonic Information Systems Co., Ltd.
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/V7P4Z98PE8.jpg)

３．基本的な使い方 ー ③ログ参照
監査ログ参照ファンクションを使ってログ参照。JSON形式で返ってくる
例）直近のタイムスタンプのログを参照する場合
SELECT audit_log_read(audit_log_read_bookmark());
例）指定した時間以降のログを参照する場合
SELECT audit_log_read(&#039;{ &quot;start&quot;: { &quot;timestamp&quot;: &quot;2025-03-18 15:33:37&quot; } }’);
⇒ バッファサイズに収まる行数だけ返ってくる。全行は返ってこない。
以降のログを参照したい場合は、下記を繰り返し実行
SELECT audit_log_read();
Panasonic Information Systems Co., Ltd.
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/2JVXWMNV7Q.jpg)

３．基本的な使い方 ー ③ログ参照
JSON形式のログは視覚的に分かりづらいため、JSON_TABLE関数にてテーブル形式の表示も可能
Panasonic Information Systems Co., Ltd.
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/5EGVDGK1EL.jpg)

４．DB監査ログ利用時の注意点
１．ログファイルへのアクセスがファンクション経由
ファンクション経由でのログアクセスに制限されており、使い勝手が悪い（ログ一括取得ができない等）
２．ログローテートや保持期間の設定が固定
下記パラメータで定義されているが、変更不可
audit_log_rotate_on_size = 52428800
audit_log_prune_seconds = 604800
audit_log_max_size = 5368709120
⇒ 50MBでログローテート
⇒ ローテートされた監査ログファイルを7週間経過で削除
⇒ 監査ログファイルの合計が5GBを超えると
最も古いローテートされた監査ファイルが削除される
３．ログファイル削除時に外部保管されない
放っておくと監査ログが削除されてしまうため、利用者側で外部保管しておく必要がある。
ログの保管期間の要件があるシステムは外部保管対応必須！
⇒ 実運用を見据え、ログ外部保管の追加対応を実施
Panasonic Information Systems Co., Ltd.
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/4JQ61XNNJP.jpg)

５．DB監査ログの外部保管
DB監査ログのテーブル投入・外部保管のスクリプトが公開されている
【Oralce MySQLブログ】
https://blogs.oracle.com/mysql/post/heatwave-audit-archive-and-dump-to-object-storage
【スクリプト配布先】
https://github.com/ivanxma/mysql_audit_archive/tree/main
■スクリプト処理概要
HeatWave
監査ログファイル
①監査ログ取得
②取得したログを投入
クライアント
（スクリプト実行元）
監査ログ格納テーブル
（新規作成）
③監査ログテーブルエクスポート
(MySQL Shellのエクスポートコマンド)
OCI Object
Storage
監査ログダンプファイル
④Object Storageへアップロード
Panasonic Information Systems Co., Ltd.
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/K744R6G371.jpg)

５．DB監査ログの外部保管
公開されているスクリプトを実行した結果
⇒ 欲しい項目（table_accessイベントの内容）がない。 カラム長不足で、長文クエリがテーブルに入っていない。
【対応】
欲しい情報を取得できるようにテーブル定義及びスクリプト修正
■テーブル定義変更
赤字部分を追加・修正
CREATE TABLE if not exists audit_archive.`audit_data` (
`server_uuid` varchar(45) NOT NULL,
・
・
・
`command_status` varchar(40) DEFAULT NULL,
`query` text DEFAULT NULL,
`query_status` int DEFAULT NULL,
・
・
・
`server_id` varchar(80) DEFAULT NULL,
`access_db` varchar(80) DEFAULT NULL,
`access_table` varchar(80) DEFAULT NULL,
`access_sql_command` varchar(80) DEFAULT NULL,
`access_query` text DEFAULT NULL,
PRIMARY KEY (`server_uuid`,`id`,`ts`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_0900_ai_ci;
■pythonスクリプトを変更
赤字部分を追加・修正
audit_sql1 = (&quot;SELECT @@server_uuid as server_uuid, id, ts, class, event,
the_account,login_ip,login_os,login_user,login_proxy,connection_id,db, &quot;
&quot; status,connection_type,connect_os,pid,_client_name,_client_version, &quot;
&quot; program_name,_platform,command,sql_command,command_status,query, &quot;
&quot; query_status,start_server_id,server_os_version,server_mysqlversion,args, &quot;
&quot; account_host,mysql_version,the_os,the_os_ver,server_id, &quot;
&quot; access_db, access_table, access_sql_command, access_query “
・
・
・
&quot; query TEXT PATH &#039;$.general_data.query’, “
&quot; query_status INT PATH &#039;$.general_data.status&#039;, &quot;
・
・
・
&quot; server_id VARCHAR(80) PATH &#039;$.startup_data.server_id&#039;, &quot;
&quot; access_db VARCHAR(80) PATH &#039;$.table_access_data.db&#039;, &quot;
&quot; access_table VARCHAR(80) PATH &#039;$.table_access_data.table&#039;, &quot;
&quot; access_sql_command VARCHAR(40) PATH &#039;$.table_access_data.sql_command&#039;, &quot;
&quot; access_query TEXT PATH &#039;$.table_access_data.query&#039; &quot;
&quot; )&quot;
&quot;) AS auditdata; &quot;)
Panasonic Information Systems Co., Ltd.
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/LJ14QVDZJG.jpg)

５．DB監査ログの外部保管
全DBユーザに対して監査ログ出力設定を仕込み、定期的に外部保管スクリプトを実行
⇒ ログ参照ファンクションの処理時間が遅くなる事象が発生
詳細を確認すると、HeatWaveのデフォルトユーザのログ件数が急増していることが発覚
【対応】
HeatWaveのデフォルトユーザの監査ログ取得をしないように設定変更
ログ取得しないフィルタ作成
SELECT audit_log_filter_set_filter(&#039;log_nothing&#039;, &#039;{&quot;filter&quot;: {&quot;log&quot;:false}}’);
作成したフィルタをデフォルトユーザに適用
SELECT audit_log_filter_set_user(&#039;ociadmin&#039;, &#039;log_nothing’);
SELECT audit_log_filter_set_user(&#039;ocidbm&#039;, &#039;log_nothing’);
SELECT audit_log_filter_set_user(&#039;oracle-cloud-agent&#039;, &#039;log_nothing&#039;);
Panasonic Information Systems Co., Ltd.
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/GJWXMLY6E2.jpg)

６．外部保管DB監査ログの参照
外部保管した監査ログの参照ができるかどうか２パターンで確認
①MySQL ShellのインポートコマンドでMDSにインポート
⇒ 問題なくインポート及び参照可能
②Lakehouseの機能を利用して、ダンプファイルをHeatWaveクラスタにロード
⇒ ダンプが圧縮ありで出力されていた為、ロード不可
公開スクリプトを修正し、非圧縮でcsvファイルをエクスポートするように変更後、ロードできることを確認
Panasonic Information Systems Co., Ltd.
18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/4EZ6QMXRE3.jpg)

７．まとめ
・DB監査ログが取得できることを確認
・DB監査ログはログ消込の設定がされており、そのままにしておくとログ消失してしまう
・利用者自身でDB監査ログを退避する必要があり、公開されているスクリプトにて外部保管が可能
※要件に応じてスクリプトの修正必要
・外部保管したDB監査ログをDBへロード及び参照できることを確認
【Oracle社への要望】
・DB監査ログのローテートや保持期間の各種パラメータのカスタマイズ
・DB監査ログの外部保管をHeatWaveのサービスとして実装
Panasonic Information Systems Co., Ltd.
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/Y7626N41EV.jpg)

ご清聴ありがとうございました
Panasonic Information Systems Co., Ltd.
20


