关键字:
安全;管理上下文;、人大金仓、KingbaseES
概述
在 KingbaseES 中,CONTEXT 上下文是指一组应用程序定义的属性,用于验证和保护应用程序。
使用 CREATE CONTEXT 语句为 context 创建 namespace 标签,将 namespace 与用来设置 context 的包相关联。可以使用 DBMS_SESSION.SET_CONTEXT 程序在关联包中设置 context 的属性值 key-value。
namespace 中的 key-value 只允许会话级访问,即只有设置其属性值的会话才可以访问该值,其他会话访问该属性值都为空。系统视图 sys_context 包含数据库上下文所有信息
特性实际操作
在 KingbaseES 中,通过使用 dbms_session 系统包中的过程来管理上下文。在使用 dbms_session 之前,需要将他添加到 kingbase.conf 文件的 shared_preload_libraries 中,并重启 KingbaseES 数据库: shared_preload_libraries = 'dbms_session' 上下文使用的示例: 1. 创建 package CREATE EXTENSION dbms_session; set ora_input_emptystr_isnull=off; create schema context_schema1; grant usage on schema context_schema1 to public; grant all on schema context_schema1 to public; create or replace context context1 using context_schema1.test_package; \set SQLTERM / CREATE OR REPLACE PACKAGE context_schema1.test_package as procedure set_context(ts_name varchar, key varchar, value varchar); procedure clear_context(ts_name varchar,client_identifier varchar, key varchar); procedure clear_all_context(ts_name varchar); end test_package; / CREATE or replace PACKAGE BODY context_schema1.test_package as procedure set_context(ts_name varchar, key varchar, value varchar) as begin dbms_session.set_context(ts_name, key,value); end; procedure clear_context(ts_name varchar,client_identifier varchar, key varchar) as begin dbms_session.clear_context(ts_name,client_identifier, key); end; procedure clear_all_context(ts_name varchar) as begin dbms_session.clear_all_context(ts_name); end; end test_package; / \set SQLTERM ; 2. 创建 context create or replace context c_user01 using context_schema1.test_package; 3. 设置 namespace 的 key-value call context_schema1.test_package.set_context('c_user01', 'u_k2', 'u_v2'); 4. 查询 select sys_context('c_user01', 'u_k2'); SYS_CONTEXT('C_USER01','U_K2') --------------------------------------------------- u_v2
call context_schema1.test_package.set_context('c_user01', 'u_k2', 'u_v2222'); Select sys_context('c_user01', 'u_k2'); SYS_CONTEXT('C_USER01','U_K2') --------------------------------------------------- u_v2222 6. 增加新的属性值 u_k3 并查询 call context_schema1.test_package.set_context('c_user01', 'u_k3', 'u_v3'); select sys_context('c_user01', 'u_k3'); SYS_CONTEXT('C_USER01','U_K3') ------------------------------------------------- u_v3 7. 清除上下文 c_user01 属性 u_k2 的值并再次查询 call context_schema1.test_package.clear_context('c_user01', null,'u_k2'); select sys_context('c_user01', 'u_k2'); sys_context ------------- (1 行记录) select sys_context('c_user01', 'u_k3'); sys_context ------------- u_v3 (1 行记录) 8. 清除上下文 c_user01 call context_schema1.test_package.clear_all_context('c_user01'); select sys_context('c_user01', 'u_k3'); sys_context ------------- (1 行记录) |
使用经验及注意事项
无特殊事项,注意插件的加载即可。
价值评价
管理上下文的特性可以有效的提供数据访问保护,避免数据泄露或丢失。
参考资料
《KingbaseES 安全指南》




