openGauss-全密态数据库等值查询

openGauss- 全密态数据库等值查询

可获得性

本特性自openGauss 1.1.0版本开始引入。

特性简介

密态数据库意在解决数据全生命周期的隐私保护问题,使得系统无论在何种业务场景和环境下,数据在传输、运算以及存储的各个环节始终都处于密文状态。当数据拥有者在客户端完成数据加密并发送给服务端后,在攻击者借助系统脆弱点窃取用户数据的状态下仍然无法获得有效的价值信息,从而起到保护数据隐私的作用。

客户价值

由于整个业务数据流在数据处理过程中都是以密文形态存在,通过全密态数据库,可以实现:

  1. 保护数据在云上全生命周期的隐私安全,无论数据处于何种状态,攻击者都无法从数据库服务端获取有效信息。
  2. 帮助云服务提供商获取第三方信任,无论是企业服务场景下的业务管理员、运维管理员,还是消费者云业务下的应用开发者,用户通过将密钥掌握在自己手上,使得高权限用户无法获取数据有效信息。
  3. 让云数据库借助全密态能力更好的遵守个人隐私保护方面的法律法规。

特性描述

从用户视角来看,整个密态等值查询的主要功能分为三部分,主要通过新增的KeyTool工具以及openGauss的增强gsql客户端来实现。

首先是客户端密钥管理功能,用户借助新增的KeyTool工具来实现CMK的生成、销毁和更新,同时支持密钥导入导出。通过该KeyTool工具的导入导出功能,CMK可以在不同的客户端间进行传输;同时,KeyTool实现了单个客户端侧的密钥管理,通过配置管理文件,可以对密钥的存储、更新进行管理。

其次该特性提供密钥创建功能和加密表创建功能,通过新增SQL语法“CREATE CLINET MASTER KEY”和“CREATE COLUMN ENCRYPTION KEY”实现在数据库侧记录和管理CMK和CEK元信息,CMK和CEK信息被记录在新增的系统表中。通过扩展“CREATE TABLE”语法为表的每一个敏感信息列指定列加密密钥和加密算法,方便后续数据密文存储。

最后该特性对用户提供密态等值查询能力,该部分功能是整个特性的核心,虽然用户对整个密文查询无感知,但是在指定数据的加密信息后,针对该敏感数据的查询将受限于当前密态等值查询的支持规格。

从整体视角来看,该特性所实现的功能主要是为了用户基于敏感数据保护的诉求来存储管理数据并基于密文数据信息实现查询任务。

特性增强

无。

特性约束

  • 数据以列级别进行加密,而无法按照行级别区分加密策略。

  • 除Rename操作外,不支持通过Alter Table语法实现对加密表列的更改(包括加密列和非加密列之间的互转换),支持添加(Add)和删除(Drop)对应的加密列。

  • 不支持对加密列设置大部分check限制性语法,但是支持check(column is not null)语法。

  • 当support_extended_features = off时,不支持对加密列使用primary key、unique。当support_extended_features = on时,仅支持确定性加密列使用primary key、unique。

  • 不支持不同数据类型之间的隐式转换。

  • 不支持不同数据类型密文间的集合操作。

  • 不支持加密列创建范围分区。

  • 加密列仅支持repeat和empty_blob()函数。

  • 当前版本只支持gsql和JDBC(部署在linux操作系统)客户端,暂不支持ODBC等其他客户端实现密态等值查询。

  • 使用JDBC客户端时,密态等值查询特性不能与负载均衡或自动选主特性同时开启。

  • 只支持通过客户端执行copy from stdin的方式、\copy命令的方式以及insert into values(…)的方式往密态表中导入数据。

  • 不支持从加密表到文件之间的copy操作。

  • 不支持包括排序、范围查询以及模糊查询等在内的除等值以外的各种密态查询。

  • 支持部分函数存储过程密态语法,密态支持函数存储过程具体约束查看《数据库管理》数据安全管理/密态支持函数/存储过程章节。

  • 不支持通过insert into…select…、merge into语法将非加密表数据插入到加密表数据中。

  • 对于处于连接状态的连接请求,只有触发更新缓存的操作(更改用户、解密加密列失败等)和重新建连后才能感知服务端CEK信息变更。

  • 不支持在由随机加密算法加密的列上进行密态等值查询。

  • 对于密态等值查询运算中如果参与比较的两个属性条件采用不同的数据加密密钥,返回报错。

  • 密态等值查询不支持时序表、外表,不支持ustore存储引擎加密。

  • 对于数据库服务侧配置变更(pg_settings系统表、权限、密钥和加密列等信息), 需要重新建立JDBC连接保证配置变更生效。

  • 不支持多条SQL语句一起执行,insert into语句多批次执行场景不受此条约束限制。

  • 密态数据库对长度为零的空字符串不进行加密。

  • 确定性加密存在频率攻击的潜在风险,不建议在明文频率分布明显的场景下使用。

  • 密态等值查询支持的数据类型包括:

    数据类

    类型

    描述

    整型

    tinyint/tinyint(n)

    微整数,同int1

    smallint

    小整数,同int2

    int4

    常用整数

    binary_integer

    Oracle兼容类型,常用整数

    bigint/bigint(n)

    大整数,同int8

    数值类型

    numeric(p,s)

    精度为p的准确数值类型

    number

    Oracle兼容类型,等同numeric(p,s)

    浮点类型

    float4

    单精度浮点数

    float8

    双精度浮点数

    double precision

    双精度浮点数

    字符类型

    char/char(n)

    定长字符串,不足补空格,默认精度为1

    varchar(n)

    变长字符串, n是指允许的最大字节长度

    text

    文本类型

    varchar2(n)

    Oracle兼容类型,等同varchar(n)

    clob

    大文本类型

    二进制类型

    bytea

    变长的二进制字符串

    blob

    二进制大对象

依赖关系

使用全密态相关特性建议更新至相同版本的libpq_ce客户端驱动及JDBC客户端。

详情查看:https://opengauss.org

详情查看:https://docs-opengauss.osinfra.cn

### OpenGauss 数据库中使用的哈希数据结构 OpenGauss 是一种高度可扩展的关系型数据库管理系统,它采用了多种高效的数据结构来提升性能和功能。其中,哈希(Hash)作为一种重要的数据结构,在多个方面得到了广泛应用。 #### 1. 哈希索引 哈希索引是一种基于键值对的快速查找机制,主要用于等值匹配查询。相比于传统的 B 树索引,哈希索引具有更快的查找速度,但不支持范围查询或排序操作[^2]。 - **创建方式**: ```sql CREATE INDEX idx_name ON table_name USING HASH(column_name); ``` - **适用场景**: - 主要应用于频繁进行等值比较 (`=` 或 `IN`) 的查询- 不适合涉及范围查询、排序或其他复杂条件的情况。 #### 2. 内部哈希表 在 OpenGauss 的内部实现中,哈希表广泛用于缓存管理和元数据存储。例如,系统目录中的对象(如表、列、索引等)通常通过哈希表进行快速定位和访问[^3]。 - **特点**: - 高效的插入、删除和查找时间复杂度为 O(1),非常适合高频次的小规模数据操作。 - 支持动态扩容以适应不断增长的数据集大小。 #### 3. 密态数据库中的哈希技术 密态数据库是指能够在不解密的情况下直接对加密数据进行检索和计算的一种新型数据库系统[^1]。在这种架构下,哈希函数被用来生成唯一的标识符,从而允许对密文数据执行高效的对比操作而不泄露原始内容。 - **应用场景**: - 安全审计日志记录:通过对敏感信息加盐后再散列的方式保存摘要值,既保护隐私又便于后续验证真伪。 - 权限控制列表维护:利用安全哈希算法构建黑名单/白名单体系,确保只有授权主体才能访问指定资源。 #### 4. 账本数据库的历史版本追踪 账本数据库提供了一种不可变的日志记录模式,每次更新都会保留旧副本作为历史快照。为了提高读取效率并降低磁盘占用率,OpenGauss 实现了一个基于哈希链的设计方案——每当写入新的事务时,不仅会附加当前状态的变化描述,还会附带前一节点的指纹校验码形成链条关系。 - **优点**: - 即使部分文件损坏也能依据剩余完好区块重建完整的交易序列; - 方便追溯任意时刻的确切状况以便恢复误删资料或者排查异常行为源头。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值