2009년 12월 18일 금요일

SYS_CONTEXT

SYS_CONTEXT 함수
이 함수는 namespace와 관계되는 parameter의 값을 반환한다.

이 함수는 SQL과 PL/SQL에 사용할 수 있다.
namespace와 parameter은 스트링이거나 expression을 지정할 수 있다.
namespace은 미리 선언되어야 하고 그와 관계되는 parameter은 DBMS_SESSION.set_context를 사용하여 설정되어 있어야 한다.
parameter는 30바이트까지의 길이를 가지며 대소문자 구분이 없는 스트링이다.
반환되는 데이터타입은 VARCHAR2 데이터타입이다.
최대 반환되는 디폴트 길이는 256바이트이지만, length로 길이를 1∼4000바이트까지 변경할 수 있다.
오라클에서 built-in한 namespace는 USERENV이며 이에 대한 parameter는 다음 표에 정리하였다.

【형식】
      SYS_CONTEXT('namespace','parameter' [,length])

【예제】
SQL> select SYS_CONTEXT('USERENV','session_user') from dual;

SYS_CONTEXT('USERENV','SESSION_USER')
-------------------------------------
JIJOE

SQL> select SYS_CONTEXT('USERENV','lang') from dual;

SYS_CONTEXT('USERENV','LANG')
-----------------------------
US

SQL>

 USERENV에서 사용될 parameter는 다음과 같다.
ACTION모듈내 위치로 DBMS_APPLICATION_INFO 패키지로 설정됨
AUDITED_CURSORID감사를 트리거하는 SQL의 커서 ID를 반환
AUTHENTICATED_IDENTITYauthentication하에 사용중인 ID를 반환
AUTHENTICATION_DATA로그인 사용자가 권한받아 사용중인 데이터
AUTHENTICATION_METHOD권한방법을 반환
BG_JOB_ID현재 세션의 job ID
CLIENT_IDENTIFIERDBMS_SESSION를 통한 응용에 의해 설정된 ID
CLIENT_INFO사용자 세션정보를 64바이트까지 반환
CURRENT_BINDfine-grained auditing에 대한 bind variables
CURRENT_SCHEMA현재 스키마에서 사용중인 디폴트 스키마의 이름
CURRENT_SCHEMAID현재 스키마에서 사용중인 디폴트 스키마의 ID
CURRENT_SQL트리거된 첫 4K바이트
n은 1∼7의 4K 바이트
CURRENT_SQLn
CURRENT_SQL_LENGTH현재 SQL문의 길이
DB_DOMAINDB_DOMAIN으로 지정한 데이터베이스의 도메인
DB_NAMEDB_NAME으로 지정한 데이터베이스의 이름
DB_UNIQUE_NAMEDB_UNIQUE_NAME으로 지정한 데이터베이스의 이름
ENTRYID현재 audit 엔트리번호
ENTERPRISE_IDENTITY사용자의 entrprise-wide identity
FG_JOB_ID현재 세션의 job ID
GLOBAL_CONTEXT_MEMORYglobally access context에 의해서 사용중인 SGA의 번호
GLOBAL_UIDglobal user ID
HOSThost machine의 이름
IDENTIFICATION_TYPE스키마가 데이터베이스에서 생성된 방법
INSTANCE현재 인스턴스의 ID 번호
INSTANCE_NAME클라이언트가 연결된 machine의 IP
IP_ADDRESS연결된 IP 주소
ISDBADBA 권한을 가진 사용자라면 TRUE
LANG언어이름
LANGUAGE사용자 세션에서 현재 사용중인 언어
MODULEDBMS_APPLICATION_INFO 패키디로 설정한 모듈이름
NETWORK_PROTOCOL통신에 사용중인 네트워크 프로토콜
NLS_CALENDAR현재 세션의 달력
NLS_CURRENCY세션의 화폐
NLS_DATE_FORMAT세션의 날짜 포멧
NLS_DATE_LANGUAGE날짜 표현 언어
NLS_SORTBINARY 또는 언어적인 소트
NLS_TERRITORY현재 세션의 territory
OS_USER운영체제 사용자 ID
POLICY_INVOKERrow-level security policy 함수의 invoker
PROXY_ENTERPRISE_IDENTITYproxy 사용자가 enterprise user인 경우, 오라클 인터넷 디렉토리 DN
PROXY_GLOBAL_UIDEnterprise user security proxy 사용자에 대한 오라클 인터넷 디렉토로부터의 global 사용자
PROXY_USER데이터베이스 사용자 이름
PROXY_USERID데이터베이스 사용자의 ID
SERVER_HOST인스턴스가 동작중인 기계의 호스트이름
SERVICE_NAME주어진 세션이 접속된 서비스 이름
SESSION_USER엔터프라이즈 사용자인 경우, 스키마이름
그 외 사용자인 경우, 데이터베이스 사용자 이름
SESSION_USERID데이터베이스 사용자 이름의 ID
SESSIONID감사 세션 ID
SID세션 번호
STATEMENTID감사문 ID
TERMINAL운영체제 시스템 ID

다음은 폐기된 파라미터 목록이다.

• AUTHENTICATION_TYPE
• CURRENT_USER
• CURRENT_USERID
• EXTERNAL_NAME

트리거로 잘 사용하면,

어떤 사용자가 무엇을 했는지 알수있다.

[출처] SYS_CONTEXT |작성자 반테러

 

SELECT SYS_CONTEXT('USERENV','TERMINAL') terminal FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','LANGUAGE') language FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','SESSIONID') sessionid FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','INSTANCE') instance FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','ENTRYID') entryid FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','ISDBA') isdba FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','NLS_TERRITORY') nls_territory FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','NLS_CURRENCY') nls_currency FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','NLS_CALENDAR') nls_calendar FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','NLS_DATE_FORMAT') nls_date_format FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','NLS_DATE_LANGUAGE') nls_date_language FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','NLS_SORT') nls_sort FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','CURRENT_USER') current_user FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','CURRENT_USERID') current_userid FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','SESSION_USER') session_user FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','SESSION_USERID') session_userid FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','PROXY_USER') proxy_user FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','PROXY_USERID') proxy_userid FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','DB_DOMAIN') db_domain FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','DB_NAME') db_name FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','HOST') host FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','OS_USER') os_user FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','EXTERNAL_NAME') external_name FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','IP_ADDRESS') ip_address FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') network_protocol FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','BG_JOB_ID') bg_job_id FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','FG_JOB_ID') fg_job_id FROM DUAL UNION ALL
SELECT SYS_CONTEXT('USERENV','AUTHENTICATION_TYPE') FROM DUAL 

댓글 없음:

댓글 쓰기