이 함수는 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_IDENTITY | authentication하에 사용중인 ID를 반환 |
| AUTHENTICATION_DATA | 로그인 사용자가 권한받아 사용중인 데이터 |
| AUTHENTICATION_METHOD | 권한방법을 반환 |
| BG_JOB_ID | 현재 세션의 job ID |
| CLIENT_IDENTIFIER | DBMS_SESSION를 통한 응용에 의해 설정된 ID |
| CLIENT_INFO | 사용자 세션정보를 64바이트까지 반환 |
| CURRENT_BIND | fine-grained auditing에 대한 bind variables |
| CURRENT_SCHEMA | 현재 스키마에서 사용중인 디폴트 스키마의 이름 |
| CURRENT_SCHEMAID | 현재 스키마에서 사용중인 디폴트 스키마의 ID |
| CURRENT_SQL | 트리거된 첫 4K바이트 |
| CURRENT_SQLn | |
| CURRENT_SQL_LENGTH | 현재 SQL문의 길이 |
| DB_DOMAIN | DB_DOMAIN으로 지정한 데이터베이스의 도메인 |
| DB_NAME | DB_NAME으로 지정한 데이터베이스의 이름 |
| DB_UNIQUE_NAME | DB_UNIQUE_NAME으로 지정한 데이터베이스의 이름 |
| ENTRYID | 현재 audit 엔트리번호 |
| ENTERPRISE_IDENTITY | 사용자의 entrprise-wide identity |
| FG_JOB_ID | 현재 세션의 job ID |
| GLOBAL_CONTEXT_MEMORY | globally access context에 의해서 사용중인 SGA의 번호 |
| GLOBAL_UID | global user ID |
| HOST | host machine의 이름 |
| IDENTIFICATION_TYPE | 스키마가 데이터베이스에서 생성된 방법 |
| INSTANCE | 현재 인스턴스의 ID 번호 |
| INSTANCE_NAME | 클라이언트가 연결된 machine의 IP |
| IP_ADDRESS | 연결된 IP 주소 |
| ISDBA | DBA 권한을 가진 사용자라면 TRUE |
| LANG | 언어이름 |
| LANGUAGE | 사용자 세션에서 현재 사용중인 언어 |
| MODULE | DBMS_APPLICATION_INFO 패키디로 설정한 모듈이름 |
| NETWORK_PROTOCOL | 통신에 사용중인 네트워크 프로토콜 |
| NLS_CALENDAR | 현재 세션의 달력 |
| NLS_CURRENCY | 세션의 화폐 |
| NLS_DATE_FORMAT | 세션의 날짜 포멧 |
| NLS_DATE_LANGUAGE | 날짜 표현 언어 |
| NLS_SORT | BINARY 또는 언어적인 소트 |
| NLS_TERRITORY | 현재 세션의 territory |
| OS_USER | 운영체제 사용자 ID |
| POLICY_INVOKER | row-level security policy 함수의 invoker |
| PROXY_ENTERPRISE_IDENTITY | proxy 사용자가 enterprise user인 경우, 오라클 인터넷 디렉토리 DN |
| PROXY_GLOBAL_UID | Enterprise 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 |
다음은 폐기된 파라미터 목록이다.
트리거로 잘 사용하면,
어떤 사용자가 무엇을 했는지 알수있다.
[출처] 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
[출처] 세션 정보 확인 함수 SYS_CONTEXT|작성자 분리수거
댓글 없음:
댓글 쓰기