任何人都可以使用
提供足够好的共享Sys_Context
示例
Dbms_Session.Set_Identifier(user_id)
我希望用户成功登录后能够从其他连接访问某些sys上下文属性。
我的情况:
Spring Boot 2.0.6使用 HikariCP连接池
连接到Oralce 11g程序
user_id
Dbms_Session.Set_Context('ENV', USER_ID, user_id)
Sys_Context('ENV', user_id)
返回Null
Sys_Context('ENV', user_id)
返回Null,因为资源正在通过其他连接访问db,因此在 CURRENT 上下文中没有user_id。
此Oracle文档声称有可能:https://docs.oracle.com/cd/B28359_01/network.111/b28531/app_context.htm#DBSEG79745
根据以下这些指南: https://oracle-base.com/articles/misc/dbms_session https://web.stanford.edu/dept/itss/docs/oracle/10gR2/network.102/b14266/apdvcntx.htm
如果无法实现,请告诉我们Dbms_Session.Set_Identifier(user_id)
的确切用途,因为我发现这些文档比较晦涩,无法复制它们显示的任何示例。
答案 0 :(得分:2)
必须使用GLOBALLY ACCESSIBLE
选项创建上下文,例如
create context ENV using scott.security_pkg accessed globally;
dbms_session.set_context
之内)调用 scott.security_pkg
dbms_session.set_context(
namespace => 'ENV',
attribute => 'user_id',
value => 'jane',
client_id => '12345');
dbms_session.set_identifier
,
dbms_session.set_identifier(client_id=>'12345');
现在,您可以使用sys_context
来获取属性的值,例如
sys_context('ENV','user_id')
这只是一个使用user_id
作为要存储的属性名称的示例。重要的是client_id
,它唯一地标识用户的会话。