返回首页

gbase数据、南大通用产品文档:GBase8cCREATE COLUMN ENCRYPTION KEY

更新日期:2024年09月11日

功能描述
创建一个列加密密钥,该密钥可用于加密表中指定列。
注意事项
本语法属于全密态数据库特有语法。
当使用gsql 连接数据库服务器时,需使用‘-C’参数,打开全密态数据库的开关,才能使
用本语法。
由该语法创建CEK 对象可用于列级加密。
在定义表中列字段时,
可指定一个CEK 对象,
用于加密该列。
语法格式
CREATE COLUMN ENCRYPTION KEY column_encryption_key_name
[WITH] [VALUES] ( ['CLIENT_MASTER_KEY' , 'ALGORITHM'] );

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
852
参数说明

column_encryption_key_name
该参数作为密钥对象名,在同一命名空间下,需满足命名唯一性约束。
取值范围:字符串,要符合标识符的命名规范。

CLIENT_MASTER_KEY
指定用于加密本CEK 的CMK,
取值为:
CMK 对象名,
该CMK 对象由CREATE CLIENT
MASTER KEY 语法创建。

ALGORITHM
指定该CEK 将用于何种加密算法,取值范围为:
AEAD_AES_256_CBC_HMAC_SHA256、AEAD_AES_128_CBC_HMAC_SHA256 和
SM4_SM3;
须知:国密算法约束:由于SM2、SM3、SM4 等算法属于中国国家密码标准算
法,为规避法律风险,需配套使用。即如果将CEK 用于SM4_SM3 算法,则仅能使用SM2
算法来对该CEK 进行加密。
示例
--创建列加密密钥(CEK)
gbase=> CREATE COLUMN ENCRYPTION KEY a_cek WITH VALUES
(CLIENT_MASTER_KEY = a_cmk, ALGORITHM
=
AEAD_AES_256_CBC_HMAC_SHA256);
CREATE COLUMN ENCRYPTION KEY
gbase=> CREATE COLUMN ENCRYPTION KEY another_cek WITH VALUES
(CLIENT_MASTER_KEY = a_cmk, ALGORITHM
= SM4_SM3);
CREATE COLUMN ENCRYPTION KEY

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
853

如果按中断键,那么 dbload 将终止并废弃已插入但还没有落实给数据库
的任何新行(如果数据库具有事务)

应用程序在输入缓冲区中将数据传给驱动程序。驱动程序在输出缓冲区中将数据返回给应
用程序。
应用程序必须同时为输入和输出缓冲区分配内存。如果应用程序使用缓冲区来检索字符串
数据,则该缓冲区必须包含空终止字节的空间。
有些函数接受指向缓冲区的指针,稍后由其他函数来使用。应用程序必须确保这些指针保
持有效,直到所有适用的函数都已使用了它们。例如,SQLBindCol中的参数 rgbValue 指
向 SQLFetch 返回列的数据的输出缓冲区。
输入缓冲区
应用程序将输入缓冲区的地址和长度传给驱动程序。
缓冲区的长度必须为下列值之一:

大于或等于零的长度
此值为输入缓冲区中数据的实际长度。对于字符数据,长度零指示该数据为空字符串
(零长度)。零长度不同于空指针。如果应用程序指定字符数据的长度,则字符数据
不需要以空字符结尾。

SQL_NTS
此值指定字符串数据值为空终止的。

SQL_NULL_DATA
此值告诉驱动程序忽略输入缓冲区中的值,
并替代使用 NULL 数据值。
仅当输入缓冲
区提供 SQL 语句中参数的值时,它才是有效的。
对于包含嵌入的空字符的字符数据,
GBase 8s ODBC Driver函数的操作是未定义的;
出于最
大可操作性的考虑,最好不要使用它们。GBase 8s 数据库服务器将空字符处理为字符串结
束标志,或作为不再存在数据的指示符。
除非在函数描述中禁止它,否则,输入缓冲区的地址可为空指针。在此情况下,对应的缓
冲区长度参数的值将被忽略。

输出缓冲区
应用程序将参数传给驱动程序,以便于驱动程序可在输出缓冲区中返回数据。
这些参数为:

输出缓冲区的地址,驱动程序将数据返回这里
除非在函数描述中禁止它,否则,输出缓冲区的地址可为空指针。在此情况下,驱动
程序不在缓冲区中返回任何内容,在没有错误时,返回 SQL_SUCCESS。

GBase 8s ODBC Driver 程序员指南
南大通用数据技术股份有限公司
- 15 -

如有必要,在返回它之前,驱动程序转换数据。在返回它之前,驱动程序始终空终止
字符数据。

缓冲区的长度
如果返回的数据有固定的 C 长度,
比如整数、
实数或日期结构,
则驱动程序忽略此值。

驱动程序返回数据长度的变量地址(长度缓冲区)
如果在结果集中数据为空值,则返回的数据长度为 SQL_NULL_DATA。否则,返回的数
据长度为可用于返回的数据的字节数。如果驱动程序转换该数据,则返回的数据长度
为转换之后保留的字节数;对于字符数据,它不包括驱动程序添加的空终止字节。
如果输出缓冲区太小,则驱动程序尝试截断数据。如果截断未导致有效数据的丢失,则驱
动程序在输出缓冲区中返回截断的数据,在长度缓冲区中返回可用数据的长度(与截断的
数据的长度相反)

并返回 SQL_SUCCESS_WITH_INFO。
如果截断导致有效数据的丢失,
则驱动程序保持输出和长度缓冲区不变,并返回 SQL_ERROR。应用程序调用
SQLGetDiagRec 来检索关于截断或错误的信息。