
# CREATE COLUMN ENCRYPTION KEY
#### 功能描述
创建一个列加密密钥，该密钥可用于加密表中的指定列。
#### 注意事项
- 本语法属于全密态数据库特有语法。
- 当使用gsql连接数据库服务器时，需使用"-C"参数，打开全密态数据库的开关，才能使用本语法。
- 由该语法创建CEK对象可用于列级加密。在定义表中列字段时，可指定一个CEK对象，用于加密该列。
 
#### 语法格式
```
CREATE COLUMN ENCRYPTION KEY column_encryption_key_name WITH VALUES(CLIENT_MASTER_KEY = client_master_key_name, ALGORITHM = algorithm_type [, ENCRYPTED_VALUE = encrypted_value]);
```
#### 参数说明
- **column_encryption_key_name**
  密钥对象名。在同一命名空间下，需满足命名唯一性约束。
  取值范围：字符串，要符合[标识符命名规范](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0322.html#ZH-CN_TOPIC_0000002559105775__zh-cn_topic_0000002558056023_section14873217506)。
  
- **CLIENT_MASTER_KEY**
  客户端主密钥，用于加密指定的CEK。取值为：CMK对象名，该CMK对象由CREATE CLIENT MASTER KEY语法创建。
  
- **ALGORITHM**
  指定该CEK将用于何种加密算法，取值范围为：AEAD_AES_256_CBC_HMAC_SHA256、AEAD_AES_128_CBC_HMAC_SHA256、AEAD_AES_256_CTR_HMAC_SHA256、AES_256_GCM和SM4_SM3。
  其中不同加密算法的数据膨胀率AEAD_AES_256_CTR_HMAC_SHA256 \< AES_256_GCM \< AEAD_AES_256_CBC_HMAC_SHA256 = AEAD_AES_128_CBC_HMAC_SHA256 = SM4_SM3，推荐使用AEAD_AES_256_CTR_HMAC_SHA256 和 AES_256_GCM加密算法。
  
- **ENCRYPTED_VALUE（可选项）**
  该值为用户指定的密钥口令，密钥口令长度范围为28 \~ 256个字符。28个字符派生出来的密钥安全强度满足AES128。若用户需要用AES256，密钥口令的长度需要39个字符。如果不指定，则会自动生成256个字符的密钥。
  ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
  - 国密算法约束：由于SM2、SM3、SM4等算法属于中国国家密码标准算法，为规避法律风险，需配套使用。如果创建CMK时指定SM4算法来加密CEK，则创建CEK时必须指定SM4_SM3算法来加密数据。
  
  - ENCRYPTED_VALUE字段约束：如果使用由Huawei KMS生成的CMK来对CEK进行加密，在CREATE COLUMN ENCRYPTION KEY的语法中，如果使用ENCRYPTED_VALUE字段传入密钥，则传入的密钥的长度应为16字节的整数倍。
    
 
#### 相关链接
[ALTER COLUMN ENCRYPTION KEY](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0480.html#ZH-CN_TOPIC_0000002527826166)，[DROP COLUMN ENCRYPTION KEY](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0589.html#ZH-CN_TOPIC_0000002559105925)
