今天做一个安全审计上下文对象,使用了 sys_context。
sys_context是一个保持了和session有关的session级别的上下文。 这个上下文是一个session里的都可以访问到的地方,所以如果我们通过dbms_session.set_context放入一些session级别的自己的信息,就可以使用这个sys_context的上下文了。
dbms_session.set_context过程定义:
procedure set_context(namespace varchar2, attribute varchar2, value varchar2, username varchar2 default null, client_id varchar2 default null); -- Input arguments: -- namespace -- Name of the namespace to use for the application context -- attribute -- Name of the attribute to be set -- value -- Value to be set -- username -- username attribute for application context . default value is null. -- client_id -- client identifier that identifies a user session for which we need -- to set this context. -- --
context上下文的使用方式是:
1.创建上下文环境:
CREATE OR REPLACE CONTEXT US_CONTEXT USING SET_SECURITY_USER
2.将信息放到session中是:
CREATE OR REPLACE PROCEDURE "SET_SECURITY_USER" (USER_ID VARCHAR2) IS BEGIN DBMS_SESSION.set_context('US_CONTEXT','USER_ID',USER_ID); END;
这么做是因为,context只能通过它的受信任的过程来设置(就是上面的using 子句 指定的过程)。
直接调用:DBMS_SESSION.set_context('USF_CONTEXT','USER_ID','ADMIN');
会报错:
ERROR at line 1:
ORA-01031: insufficient privileges
ORA-06512: at "SYS.DBMS_SESSION", line 78
ORA-06512: at line 1
现在就可以通过:
SET_SECURITY_USER('ADMIN')
放入登陆用户ID
select sys_context('US_CONTEXT','USER_ID') from dual;
在session中取得用户ID。