
# 密态等值查询概述
随着企业数据上云，数据的安全隐私保护面临越来越严重的挑战。密态数据库将解决数据整个生命周期中的隐私保护问题，涵盖网络传输、数据存储以及数据运行状态；更进一步，密态数据库可以实现云化场景下的数据隐私权限分离，即实现数据拥有者和实际数据管理者的数据读取能力分离。密态等值查询将优先解决密文数据的等值类查询问题。
#### 加密模型
全密态数据库使用多级加密模型，加密模型中涉及3个对象：数据、列密钥和主密钥，其关系如[图1]所示：
图1加密模型图   
![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/figure/zh-cn_image_0000002590360882.png "点击放大")
以下是对3个对象的介绍：
- **数据** ：
  1. SQL语法中包含的数据，比如INSERT... VALUES ('data')语法中包含'data'。
  
  2. 从数据库服务端返回的查询结果，如执行SELECT语法返回的查询结果。
  
  
  ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  密态数据库会在驱动中，对SQL语法中属于加密列的数据进行加密，对数据库服务端返回的属于加密列的查询结果进行解密。
  
- **列密钥**：数据由列密钥进行加密，列密钥由数据库驱动生成或由用户手动导入，列密钥密文存储在数据库服务端。
- **主密钥**：列密钥由主密钥加密，主密钥由外部密钥管理者生成并存储。数据库驱动会自动访问外部密钥管理者，以实现对列密钥进行加解密。
#### 整体流程
在使用全密态数据库的过程中，主要流程包括如下四个阶段，本章节介绍整体流程。[使用gsql操作密态数据库](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/gaussdb-12-0376.html)、[使用JDBC操作密态数据库](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/gaussdb-12-0377.html)章节介绍详细使用流程。
**一、** **生成主密钥阶段：**首先，用户需在华为云密钥服务中生成主密钥。生成主密钥后，需准备访问主密钥的参数，以供数据库使用。
**二、执行DDL阶段：**在本阶段，用户可使用密态数据库的密钥语法依次定义主密钥和列密钥，然后定义表并指定表中某列为加密列。定义主密钥和列密钥的过程中，需访问上一阶段生成的主密钥。
**三、执行DML阶段：**在创建加密表后，用户可直接执行包含但不限于INSERT、SELECT、UPDATE、DELETE等语法。数据库驱动会自动根据上一阶段的加密定义自动对加密列中的数据进行加解密。
**四、** **清理阶段：**依次删除加密表、列密钥和主密钥。
整体流程图如[图2]所示：
图2整体流程图   
![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/figure/zh-cn_image_0000002620720549.png "点击放大")
 #### 生成主密钥阶段
首次使用密态数据库时，需使用外部密钥管理服务生成至少一个主密钥，生成方式如下：
- 华为公有云场景
  1. 登录账号：进入华为云官网，注册并登录账号。
  
  2. 创建新用户：搜索并进入"身份认证服务"，在"用户"中，通过"创建用户"按钮创建一个IAM用户，设置IAM密码，并为IAM用户设置使用"数据加密服务"的权限。 ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/figure/zh-cn_image_0000002590360974.png "点击放大")
     
  
  3. 登录新用户：重新回到登录页面，选择"IAM用户"登录方式，使用上一步新创建的IAM用户进行登录。后续操作均由该IAM用户完成。
  
  4. 创建主密钥：选择"密钥管理"，并通过"创建密钥"按钮创建至少1个密钥，即主密钥。
  
  5. 记住主密钥ID：成功创建主密钥后，每个主密钥都有1个密钥ID。在后续使用密态数据过程中，需配置主密钥ID，数据库驱动会通过Restful接口访问该主密钥。 ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/figure/zh-cn_image_0000002620720547.png "点击放大")
     
   
在生成主密钥后，需为数据驱动准备访问主密钥的参数，比如IAM用户名、项目ID等参数。华为云支持两种身份认证方式，两种方式需要的参数个数与参数类型不同，选择其中一种方式即可。下述步骤介绍如何获取这些参数：
- **方式一** aksk认证
  1. AK、SK：首先登录华为云"控制台"，单击右上角用户名，进入"我的凭证"，选择"访问密钥"，通过"新增访问密钥"创建AK与SK，创建完成后下载密钥（即AK与SK）。 ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/figure/zh-cn_image_0000002590201042.png "点击放大")
     
  
  2. 项目ID：在华为云控制台中，单击右上角用户名，并进入"我的凭证"，单击"API凭证"即可找到"项目ID"。 ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/figure/zh-cn_image_0000002620640681.png "点击放大")
     
  
  3. KMS服务器地址：https://kms.项目.myhuaweicloud.com/v1.0/项目ID/kms。
   

- **方式二** 账号密码认证
  1. IAM用户名、账号名、项目、项目ID：在华为云控制台中，单击右上角用户名，并进入"我的凭证"，可看到下图所示页面，该页面可获取4个参数：IAM用户名、账号名、项目、项目ID。 ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/figure/zh-cn_image_0000002620640679.png "点击放大")
     
  
  2. IAM服务器地址：https://iam.项目.myhuaweicloud.com/v3/auth/tokens。
  
  3. IAM用户密码：IAM用户名对应的密码。
  
  4. KMS服务器地址：https://kms.项目.myhuaweicloud.com/v1.0/项目ID/kms。
   
 
