Database OracleDB インフラ

[Oracle]SYS_CONTEXTでセッション情報(IP、プログラム名など)を取得

投稿日:2017年10月5日 更新日:

OracleDBでセッション情報を扱った操作はSYS_CONTEXTを使いこなす必要がある。

SYS_CONTEXTの使い方あれこれを書いていこう思うます。


SYS_CONTEXTって何?

マニュアルには

SYS_CONTEXTは、現在のコンテキストnamespaceに関連付けられたparameterの値を戻します。このファンクションは、SQL文およびPL/SQL文で使用できます。SYS_CONTEXTはローカルに実行する必要があります。

とかいてあります。

?ってなりますよね笑

まずコンテキストnemespaceとはなに?

簡単に説明すると表とは違うデータの持ち方です(正確には違うが)

データをコンテキスト、文脈として扱います。

「ごはんを食べる。」

というように、「ごはん」に続くワードは「食べる」だったり「炊く」だったり決まってますよね?

「〇〇と△△する。」

という文脈の考え方をOracleDBでも利用できます。

これがOracleDB上でのコンテキストです。

で、SYS_CONTEXTってなに?

SYS_CONTEXTとはこのコンテキストNamespaceを利用することができるファンクションです。

OracleDBではSYS_CONTEXTを使用しないとコンテキストNamespaceを利用できません。

SYS_CONTEXTを使用する

SYS_CONTEXTを使用しましょう。

OracleDBでSYS_CONTEXTを使用すると言ったら基本的に

事前定義済のコンテキスト

を指します。ではでは紹介します。

USERENV

この記事のメイン!!

セッション情報を取得する方法です!!!

接続元IPアドレスを取得

↓が利用方法です。

実際の実行ログは↓です。

こんな感じで接続元IPが取得できます。

接続元プログラム名を取得

↓が利用方法です。

実際の実行ログは↓です。

こんな感じでプログラム名が取得できます。

その他の取得

↓のマニュアルを確認しよう。

https://docs.oracle.com/cd/E16338_01/server.112/b56299/functions184.htm

SYS_SESSION_ROLES

接続しているユーザに該当するロールが付与されているか確認。

実際の実行ログは↓です。

TRUE”ならば付与されており、”FALSE”ならば付与されていないです。

 

SYS_CONTEXTでできること

SYS_CONTEXTを利用すれば現在のセッション情報を取得できる。

これを利用してサンプルをつくってみました。

SYS_CONTEXTを使用してOSのプロセスIDを取得

SYS_CONTEXTだけでは直接OSのプロセスIDは取得できない。

↓にも書いてあるので確認くださいませ。

[Oracle]接続しているDBユーザのOSプロセスIDを取得

OracleのDBユーザのセッション情報を表示するためにはSYS_CONTEXTを利用することが多い。 しかし、SYS_CONTEXT単体だと接続している”OSのプロセスID”を取得することができない ...

スポンサードリンク

関連記事

-Database, OracleDB, インフラ

Translate »

Copyright© shimidai2100 , 2018 All Rights Reserved.