今天做一个安全审计上下文对象,使用了 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。