前天维护数据库,在执行某个的脚本时,发现结果与实际情况有所出入。对该脚本进行检查,发现其中包含有一条子查询语句:
SELECT sys_context('userenv','ip_address') from DUAL;
在sqlplus内执行,返回结果为空。经翻阅资料,发现该语句的作用是返回一个上下文的参数值。其中sys_context是一个oracle关键字,用于查询一个命名空间(namespace)中某个参数(parameter)的值。Oracle默认建立的命名空间为“userenv”。该命名空间包含以下参数(摘自Docs Oracle ):
ACTION:模块中的位置标识(应用程序名),通过DBMS_APPLICATION_INFO包或者OCI设置。
AUDITED_CURSORID:返回触发审计的SQL游标标识。该参数在高精度审计环境下总是返回NULL。
AUTHENTICATED_IDENTITY:返回认证用的标识。下列列表中各种用户类型返回其后的值:
Kerberos认证企业用户:kerberos主体名
Kerberos认证外部用户:kerberos主体名;等同于Schema名
SSL认证企业用户:用户PKI证书的识别号
SSL认证外部用户:用户PKI证书的识别号
密钥认证企业用户:昵称;等同于登陆名
密钥认证数据库用户:数据库用户名,等同于Schema名
OS认证外部用户:外部操作系统用户名
Radius/DCE认证外部用户:方案名
携带DN代理:OID识别号
携带证书代理:客户的证书识别号
携带用户名代理:客户若为本地数据库用户则为数据库用户名,若为企业用户则返回昵称。
以密码文件登陆SYSDBA/SYSOPER:登陆名
以操作系统认证登陆SYSDBA/SYSOPER:操作系统用户名
AUTHENTICATION_DATA:用于认证登录用户的数据。
AUTHENTICATION_METHOD:认证方式,包括PASSWORD、KERBEROS、SSL、RADIUS、OS、DCE或者NONE。在Password, Kerberos或者SSL认证模式下可用关键字IDENTIFICATION_TYPE区分外部用户和企业用户。
BG_JOB_ID:若本会话是由Oracle数据库后台进程创建的,返回其任务ID;否则返回NULL。
CLIENT_IDENTIFIER:返回某应用通过DBMS_SESSION.SET_IDENTIFIER程序、OCI特性OCI_ATTR_CLIENT_IDENTIFIER或者JAVA类Oracle.jdbc.OracleConnection.setClientIdentifier所设置的标识。该特性用于各类数据库组件,鉴别认证为同一数据库用户的不同轻量级应用用户。
CLIENT_INFO:返回最多64字节的用户会话信息,当应用使用到DBMS_APPLICATION_INFO包时该信息可被保存下来。
CURRENT_BIND:返回高精度审计的绑定变量。
CURRENT_SCHEMA:返回当前Schema中的默认Schema名。该值随着会话中所使用ALTERSESSION SET CURRENT_SCHEMA声明而改变。
CURRENT_SCHEMAID:本会话所使用的默认Schema标识。
CURRENT_SQL/CURRENT_SQLn:CURRENT_SQL返回当前触发高精度审计事件的SQL前4k个字节。CURRENT_SQLn特性返回接下来以4k字节递增的序列,n可以是整数1-7。CURRENT_SQL1返回4k-8k字节;CURRENT_SQL2返回4k至8k字节,以此往下推。该属性只能在高精度审记特性的事件处理器中被指定。
CURRENT_SQL_LENGTH:当前触发高精度审记、行级安全策略功能或事件处理器的SQL声明长度。仅在功能或者事件处理器内有效。
DB_DOMAIN:由初始化参数DB_DOMAIN所指定的数据库域。
DB_NAME:由初始化参数DB_NAME所指定的数据库名。
DB_UNIQUE_NAME:由初始化参数DB_UNIQUE_NAME所指定的数据库名。
ENTRYID:当前审计项号码。高精度审记记录与一般审计记录共享该审计项标识序列。该属性不能用于分布式SQL声明。在一个标准或高精度审记的审计处理器中才能看到准确的审计项标识。
ENTERPRISE_IDENTITY:返回用户在企业范围内的标识: