暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

人大金仓数据库KingbaseES 管理上下文经验分享

原创 数据猿 2024-01-16
262


关键字:

安全;管理上下文;、人大金仓、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

  1. 修改 u_k2 的值并查询

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 安全指南》

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论