KingbaseES中的数据访问保护

KingbaseES中的数据访问保护

1.1. 管理上下文

1.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;

1.1.2. 上下文的使用

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

shared_preload_libraries = 'dbms_session'

详情参见插件 dbms_session

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

表 4.1.2 DBMS_SESSION系统包的子程序

过程名

功能

CLEAR_ALL_CONTEXT 过程

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

CLEAR_CONTEXT 过程

清除namespace中的attribute值。

LIST_CONTEXT 过程

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

SET_CONTEXT 过程

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

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

  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 ;
  1. 创建 context

create or replace context c_user01 using context_schema1.test_package;
  1. 设置 namespace 的key-value

call context_schema1.test_package.set_context('c_user01', 'u_k2', 'u_v2');
  1. 查询

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
  1. 增加新的属性值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
  1. 清除上下文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 行记录)
  1. 清除上下文c_user01

call context_schema1.test_package.clear_all_context('c_user01');
select sys_context('c_user01', 'u_k3');
sys_context
-------------

(1 行记录)

1.2. 手动加密数据

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

4.2.1. 加密算法

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

表 4.2.10 加密算法

算法

内建

使用 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

yes

对称

注意

  1. SHA2算法是在版本 0.9.8 时被加入到 OpenSSL 的。

  2. OpenSSL 支持的任何摘要算法都是自动选取的。这对于使用密码来说是不可能的,因为需要被显式地支持。

  3. AES从版本0.9.7 就开始被包括在 OpenSSL中。

加密算法使用示例:

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');

1.2.2. 加密函数说明

  • sm3()函数

    参数为: 加密数据。

  • sm4()函数/rc4()函数

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

  • sm4_ex()函数(rc4函数没有ex函数扩展)

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

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

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

1.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);
  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值