openGauss 全密态数据库等值查询 特性约束

116 阅读3分钟

特性约束

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

  • 除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_integerOracle兼容类型,常用整数
    bigint/bigint(n)大整数,同int8
    数值类型numeric(p,s)精度为p的准确数值类型
    numberOracle兼容类型,等同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客户端。

详情查看:opengauss.org 详情查看:docs-opengauss.osinfra.cn