※ 本記事は2016年12月22日に公開されたものです。

データベースを利用するときには、データベースサーバーに対してクライアントから接続ををおこないます。ユーザーが正しく認証されると、データベースセッションが確立されます。このデータベースセッションには、さまざまな情報が付帯されています。たとえばデータベースで監査証跡を取得すると、監査証跡にはどのデータベースユーザーがいつどのようなSQLを発行したかだけではなく、OSのユーザー名やクライアントホスト、アプリケーション名など様々なセッションに関する情報も記録していることが標準監査の監査証跡を確認するためのDBA_AUDIT_TRAILビューや、12cからの統合監査の監査証跡を確認するためのUNIFIED_AUDIT_TRAILビューの列定義から確認できます。

このセッション情報は、データベース標準の監査などの機能で利用するだけでなく、ユーザーが利用することも可能です。
たとえばアプリケーションロジックの中にクライアントの中に組み込んで、特定のホストやOSユーザーで実行した時のみその処理ができるようにしたり、仮想プライベートデータベース(VPD: Virtual Private Database)、ファイングレイン監査、統合監査、Data Redaction、Database Vaultなどオラクルの機能に組み込んでより詳細なアクセス制御や監査条件の指定をおこなう事ができます。

セッション情報はSYS_CONTEXT関数で取得できます。
たとえば現在接続中のデータベースユーザーを取得するSQL文は以下のようになります。

SQL> select sys_context('USERENV','SESSION_USER') from dual;
SYS_CONTEXT('USERENV','SESSION_USER')
--------------------------------------------------------------------------------
PUKU

同様にクライアントホストを取得するSQL文は以下のようになります。

SQL> select sys_context('USERENV','HOST') from dual;
SYS_CONTEXT('USERENV','HOST')
--------------------------------------------------------------------------------
dbsec.jp.oracle.com

SYS_CONTEXT関数は、アプリケーションコンテキストと呼ばれるメモリに格納された情報を取得するための関数です。
USERENVは事前定義のアプリケーションコンテキストで、セッションの情報を保持しています。USERENVにどのようなセッション情報が格納されているかは「ネームスペースUSERENVの事前定義パラメータ」から確認できます。

セッション情報は、より詳細なセキュリティの制御をおこなう際に便利な機能です。
ぜひご活用ください。

「もくじ」にもどる