はじめに:Snowflakeの「監査ログ」って何?
「誰がいつログインしたのか」「どんなクエリが実行されたのか」「どのテーブルにアクセスされたのか」――こうした情報を確認することは、セキュリティ監査やトラブル調査に欠かせません。Snowflakeでは、これらの情報を 監査ログ として自動で蓄積してくれています。
この記事では、Snowflakeの監査ログを参照するための2つの仕組み、ACCOUNT_USAGE スキーマ と INFORMATION_SCHEMA の違いと使い方を、初心者の方にもわかるようにやさしく解説します!

2つの監査ログの違い
Snowflakeでは SNOWFLAKE という共有データベースに、監査用のビューがあらかじめ用意されています。代表的な2つを比較してみましょう。
SNOWFLAKE.ACCOUNT_USAGE
- 過去365日分の履歴を保持
- アカウント全体の情報をまとめて参照可能
- データ反映に 最大3時間程度の遅延 あり
- デフォルトでは
ACCOUNTADMINロールが必要
INFORMATION_SCHEMA
- 各データベース配下に存在するスキーマ
- 保持期間は短い(7日〜14日程度のものが多い)
- リアルタイム性が高い(ほぼ即時反映)
- テーブル関数として呼び出すスタイル
ざっくり言うと「長期分析ならACCOUNT_USAGE、いま起きたことを確認するならINFORMATION_SCHEMA」と覚えておくとOKです。
よく使うビュー&クエリ例
1. ログイン履歴を確認する(LOGIN_HISTORY)
「誰がいつ、どこからログインしたか」を確認できます。失敗したログインも記録されるので、不正アクセスの兆候を掴むのに最適です。
-- 過去7日間のログイン履歴(失敗含む)
SELECT event_timestamp,
user_name,
client_ip,
reported_client_type,
is_success,
error_message
FROM SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY
WHERE event_timestamp >= DATEADD(day, -7, CURRENT_TIMESTAMP())
ORDER BY event_timestamp DESC;
2. クエリ履歴を確認する(QUERY_HISTORY)
実行されたSQL文・実行時間・利用ウェアハウスなどがすべて残ります。重いクエリ調査やコスト分析にも便利です。
-- 過去24時間で実行時間が長かったクエリTop10
SELECT user_name,
warehouse_name,
total_elapsed_time/1000 AS sec,
query_text
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
WHERE start_time >= DATEADD(hour, -24, CURRENT_TIMESTAMP())
ORDER BY total_elapsed_time DESC
LIMIT 10;
リアルタイムに見たい場合は、INFORMATION_SCHEMAのテーブル関数を使います。
SELECT *
FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY())
ORDER BY start_time DESC
LIMIT 20;
3. 誰がどのテーブルを触ったか(ACCESS_HISTORY)
Enterprise Edition以上で利用できる強力なビュー。クエリで参照・更新された テーブル/カラム単位 の追跡が可能です。
SELECT query_start_time,
user_name,
direct_objects_accessed,
objects_modified
FROM SNOWFLAKE.ACCOUNT_USAGE.ACCESS_HISTORY
WHERE query_start_time >= DATEADD(day, -1, CURRENT_TIMESTAMP())
ORDER BY query_start_time DESC;

よくあるユースケースと注意点
ユースケース
- セキュリティ監査:不審なIPからのログイン検知(Snowflakeネットワークポリシー入門と組み合わせると◎)
- 権限変更の追跡:
GRANTS_TO_USERSやGRANTS_TO_ROLESでロール付与履歴を確認(カスタムロールとGRANT/REVOKEと相性◎) - コスト分析:ACCOUNT_USAGEビュー入門でクレジット消費を追跡
注意点
- ACCOUNT_USAGEは 遅延があるので「今この瞬間」を見るには不向き
- ログ閲覧自体に高い権限が必要 → カスタムロールへ
IMPORTED PRIVILEGESを付与して制限的に渡すのがおすすめ - 監査ログにはSQL文がそのまま残るので、列・行レベルセキュリティやMFA/SSOと合わせて運用ルールを整備しましょう
まとめ
Snowflakeの監査ログは、ACCOUNT_USAGE(長期・遅延あり)とINFORMATION_SCHEMA(短期・リアルタイム)の2本立てで提供されています。まずは QUERY_HISTORY と LOGIN_HISTORY から触ってみると、監視・調査・最適化のいずれにも効果が見えてきますよ。日々の運用に組み込んで、安心して使えるSnowflake環境を育てていきましょう!
参考リンク
- ACCOUNT_USAGE スキーマ — Snowflake Documentation
- INFORMATION_SCHEMA — Snowflake Documentation
- QUERY_HISTORY ビュー
- LOGIN_HISTORY ビュー
- ACCESS_HISTORY ビュー
関連記事
- Snowflakeクレジット消費を分析|ACCOUNT_USAGEビュー入門 – ACCOUNT_USAGEを使ったコスト分析の入門記事
- Snowflakeネットワークポリシー入門|IPでアクセスを制限する方法 – 不審なログインを未然に防ぐIP制限の設定
- Snowflake MFAとSSO設定入門|認証を強化する2つの仕組み – 監査ログと併用したい認証強化策
- Snowflake列レベル・行レベルセキュリティ入門|ポリシーの作り方 – 監査と一緒に整備したいデータ保護のしくみ
- Snowflakeカスタムロール作成とGRANT/REVOKE入門 – 監査ログ閲覧用ロールを作るときに役立つ
- Snowflake RBAC入門|ロールで権限管理を始めよう – 監査の前提となる権限設計の基本

