DDL(Data Definition Language数据定义语言),用于定义或修改数据库中的对象。如:表、索引、视图等。
说明:不支持数据库主节点不完整时进行DDL操作。例如:openGauss中有1个数据库主节点故障时执行新建数据库、表等操作都会失败。
定义列加密密钥 :
列加密密钥主要用于密态数据库特性中,用来加密数据。列加密密钥定义主要包括创建列加密密钥以及删除列加密密钥。所涉及的SQL语句如下:
1、创建列加密密钥(CREATE COLUMN ENCRYPTION KEY)
1)功能描述:创建一个列加密密钥,该密钥可用于加密表中指定列。
2)注意事项:本语法属于全密态数据库特有语法。当使用gsql连接数据库服务器时,需使用‘-C’参数,打开全密态数据库的开关,才能使用本语法。由该语法创建CEK对象可用于列级加密。在定义表中列字段时,可指定一个CEK对象,用于加密该列。
3)语法:CREATE COLUMN ENCRYPTION KEY column_encryption_key_name WITH(CLIENT_MASTER_KEY = client_master_key_name, ALGORITHM = algorithm_type, ENCRYPTED_VALUE = encrypted_value);
4)参数说明:
•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;
•ENCRYPTED_VALUE(可选项),该值为用户指定的密钥口令,密钥口令长度范围为28 ~ 256位,28位派生出来的密钥安全强度满足AES128,若用户需要用AES256,密钥口令的长度需要39位,如果不指定,则会自动生成256比特的密钥。
5)国密算法约束:由于SM2、SM3、SM4等算法属于中国国家密码标准算法,为规避法律风险,需配套使用。即如果将CEK用于SM4_SM3算法,则仅能使用SM4算法来对该CEK进行加密。
6)示例
--创建列加密密钥(CEK)
openGauss=> CREATE COLUMN ENCRYPTION KEY a_cek WITH VALUES (CLIENT_MASTER_KEY = a_cmk, ALGORITHM = AEAD_AES_256_CBC_HMAC_SHA256);
CREATE COLUMN ENCRYPTION KEY
openGauss=> CREATE COLUMN ENCRYPTION KEY another_cek WITH VALUES (CLIENT_MASTER_KEY = a_cmk, ALGORITHM = SM4_SM3);
CREATE COLUMN ENCRYPTION KEY
2、删列加密密钥(DROP COLUMN ENCRYPTION KEY):
1)功能描述:删除一个列加密密钥(cek)。
2)注意事项:只有列加密密钥所有者或者被授予了DROP权限的用户有权限执行命令,系统管理员默认拥有此权限。
3)语法:DROP COLUMN ENCRYPTION KEY [ IF EXISTS ] column_encryption_key_name [CASCADE];
4)参数说明:
•IF EXISTS,如果指定的列加密密钥不存在,则发出一个notice而不是抛出一个错误。
•column_encryption_key_name,要删除的列加密密钥名称。取值范围:字符串,已存在的列加密密钥名称。
5)示例:
--删除列加密密钥。
openGauss=# DROP COLUMN ENCRYPTION KEY ImgCEK CASCADE;
ERROR: cannot drop column setting: imgcek cascadely because encrypted column depend on it.
HINT: we have to drop encrypted column: name, ... before drop column setting: imgcek cascadely.




