金仓数据库KingbaseES安全指南--4 数据访问保护

4.1. 管理上下文

4.1.1. 关于上下文

在KingbaseES中,CONTEXT上下文是指一组应用程序定义的属性,用于验证和保护应用程序。

使用CREATE CONTEXT语句为context创建namespace标签,将namespace与用来设置context的包相关联。可以使用 DBMS_SESSION.SET_CONTEXT 程序在关联包中设置context的属性值key-value。

namespace中的key-value只允许会话级访问,即只有设置其属性值的会话才可以访问该值, 其他会话访问该属性值都为空。系统视图sys_context包含数据库上下文所有信息。

例如:创建一个名为context_test的context,关联包为package_test:

CREATE CONTEXT context_test USING package_test;

4.1.2. 上下文的使用

在KingbaseES中,通过使用dbms_session系统包中的过程来管理上下文。在使用 dbms_session 之前,需要将他添加到 kingbase.conf 文件的 shared_preload_libraries 中,并重启 KingbaseES 数据库:

shared_preload_libraries = 'dbms_session'

DBMS_SESSION系统包包含的子程序及简介如下表所示:

表 4.1.3 DBMS_SESSION系统包的子程序

过程名

功能

CLEAR_ALL_CONTEXT 过程

清理当前会话的指定namespace的所有上下文。

CLEAR_CONTEXT 过程

清除namespace中的attribute值。

LIST_CONTEXT 过程

返回当前会话所有上下文属性和值。

SET_CONTEXT 过程

设置上下文 namespace的属性和值。

下面通过一个示例演示上下文的使用:

首先,添加扩展包

create extension dbms_session;

第一步 创建 package:
CREATE or replace package test_pk as
        procedure set_context(ts_name varchar, key varchar, value varchar);
        procedure set_user_context(ts_name varchar, key varchar, value varchar, username varchar, client_id varchar);
        procedure clear_context(ts_name varchar, client_identifier varchar, key varchar);
        procedure clear_all_context(ts_name varchar);
end test_pk;
/
CREATE or replace package body test_pk as
        procedure set_context(ts_name varchar, key varchar, value varchar) as
                begin
                        dbms_session.set_context(ts_name, key, value);
                end;
        procedure set_user_context(ts_name varchar, key varchar, value varchar, username varchar, client_id varchar) as
                begin
                        dbms_session.set_context(ts_name, key, value, username, client_id);
                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_pk;
/

第二步 创建 context
create or replace context c_user01 using test_pk;

第三步 设置 namespace 的key-value
call test_pk.set_context('c_user01', 'u_k2', 'u_v2');

第四步 查询
select sys_context('c_user01', 'u_k2');
SYS_CONTEXT('C_USER01','U_K2')
---------------------------------------------------
u_v2

第五步 修改u_k2的值并查询
call test_pk.set_context('c_user01', 'u_k2', 'u_v2222');
Select sys_context('c_user01', 'u_k2');
SYS_CONTEXT('C_USER01','U_K2')
---------------------------------------------------
u_v2222

第六步 增加新的属性值u_k3并查询
call test_pk.set_context('c_user01', 'u_k3', 'u_v3');
select sys_context('c_user01', 'u_k3');
SYS_CONTEXT('C_USER01','U_K3')
-------------------------------------------------
u_v3

第七步 清除上下文c_user01属性u_k2的值并再次查询
call test_pk.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 行记录)

第八步 清除上下文c_user01
call test_pk.clear_all_context('c_user01');
select sys_context('c_user01', 'u_k3');
sys_context
-------------

(1 行记录)

4.2. 手动加密数据

KingbaseES支持用户使用加密函数保护敏感数据,并提供了多种加密算法。

4.2.1. 加密算法

KingbaseES 提供了典型的加密算法,用户可以使用加密算法存储关键敏感数据。支持的加密算法参见下表。

表 4.2.11 加密算法

算法

内建

使用 OpenSSL

加密算法类型

MD5

yes

yes

摘要

SHA1

yes

yes

摘要

SHA224/256/384/512

yes (注意 a)

yes

摘要

Blowfish

yes

yes (注意 c)

对称

AES

yes

yes

对称

DES/3DES/CAST5

no

no

对称

SM3

yes

no

摘要

SM4

yes

yes

对称

RC4

yes

对称

加密算法使用示例:

SELECT encode(digest('abc', 'md5'), 'hex');
SELECT encode(digest('abc', 'sha1'), 'hex');
SELECT encode(digest('abc', 'sha224'), 'hex');
SELECT encode(digest('abc', 'sha384'), 'hex');
SELECT encode(digest('abc', 'sha512'), 'hex');
SELECT encode(encrypt('Lets try a longer message.', '0123456789', 'bf'), 'hex');
SELECT encode(encrypt('Lets try a longer message.', '0123456789', 'aes'), 'hex');
SELECT encode(encrypt('Lets try a longer message.', '01234567', 'des'), 'hex');
SELECT encode(encrypt('Lets try a longer message.', '0123456789012345678901', '3des'), 'hex');
SELECT encode(encrypt('Lets try a longer message.', '0123456789', 'cast5'), 'hex');

4.2.2. 函数说明

  1. sm3()函数

参数为: 加密数据。

  1. sm4()函数/rc4()函数

参数分别为: 加/解密数据; 密钥; 加密/解密标识。

  1. sm4_ex()函数(rc4函数没有ex函数扩展)

参数分别为: 加/解密数据; 密钥; 加密/解密标识; 填充模式。

1)填充模式选1, 数据按16字节倍数强制填充,缺m个字节则填充m个字节的m值(m最大值为16)。

2)填充模式选0,数据按16字节倍数非强制填充0x0, 同sm4。

4.2.3. 示例

create extension kbcrypto;
set bytea_output to escape;

-- 1. sm3()函数
select sm3('123456abcdef');

-- 2. sm4()函数/rc4()函数
-- 加密:
select sm4('123456abcdef','0123456789ABCDEF',0);
select rc4('123456abcdef','0123456789ABCDEF',0);
-- 解密
select sm4(sm4('123456abcdef','0123456789ABCDEF',0), '0123456789ABCDEF',1);
select rc4(rc4('123456abcdef','0123456789ABCDEF',0), '0123456789ABCDEF',1);

-- 3. sm4_ex()函数(rc4函数没有ex函数扩展)
-- 1)填充模式选1
-- 加密:
select sm4_ex('123456abcdef','0123456789ABCDEF',0,1);
-- 解密
select sm4_ex(sm4_ex('123456abcdef','0123456789ABCDEF',0,1), '0123456789ABCDEF',1,1);
-- 2) 填充模式选0
-- 加密
select sm4_ex('123456abcdef','0123456789ABCDEF',0,0);
-- 解密
select sm4_ex(sm4_ex('123456abcdef','0123456789ABCDEF',0,0), '0123456789ABCDEF',1,0);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
人大金仓数据库可以通过使用持久连接和DBLink来实现远程访问Oracle数据库。首先,我们需要使用以下语句在人大金仓数据库中创建一个到目标Oracle数据库的持久连接: SELECT dblink_connect_u('myconn_db_b', 'hostaddr=xxx.xxx.xxx.xxx port=54321 dbname=db_b user=u_b password=密码'); 其中,xxx.xxx.xxx.xxx是目标Oracle数据库的主机地址,54321是目标Oracle数据库的端口号,db_b是要访问数据库名称,u_b和密码是用于连接目标Oracle数据库的用户名和密码。这将会创建一个名为myconn_db_b的持久连接。 接下来,您可以使用人大金仓数据库的DBLink功能来访问远程Oracle数据库。具体使用方法可以参考人大金仓数据库的相关文档或者使用以下语句: SELECT * FROM tablename@myconn_db_b; 其中,tablename是您要访问的远程Oracle数据库中的表名,myconn_db_b是上一步创建的持久连接名称。通过这种方式,您可以在人大金仓数据库访问并操作远程Oracle数据库数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [数据库审计系统需求说明.docx](https://download.csdn.net/download/qq_43934844/87590316)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [.NET CORE ORM 达梦 人大金仓 操作数据库 访问 连接](https://blog.csdn.net/jhl52771/article/details/109631622)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [人大金仓Kingbase数据库使用dblink进行跨库操作示例](https://blog.csdn.net/wsdhla/article/details/130963638)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值