更新时间:2024-10-31 GMT+08:00
分享

密态等值查询概述

随着企业数据上云,数据的安全隐私保护面临越来越严重的挑战。密态数据库将解决数据整个生命周期中的隐私保护问题,涵盖网络传输、数据存储以及数据运行状态;更进一步,密态数据库可以实现云化场景下的数据隐私权限分离,即实现数据拥有者和实际数据管理者的数据读取能力分离。密态等值查询将优先解决密文数据的等值类查询问题。

加密模型

全密态数据库使用多级加密模型,加密模型中涉及3个对象:数据、列密钥和主密钥,以下是对3个对象的介绍:

  • 数据
    • 指SQL语法中包含的数据,比如INSERT...VALUES ('data')语法中包含'data'。
    • 指从数据库服务端返回的查询结果,比如执行SELECT...语法返回的查询结果。

    密态数据库会在驱动中对SQL语法中属于加密列的数据进行加密,对数据库服务端返回的属于加密列的查询结果进行解密。

  • 列密钥:数据由列密钥进行加密,列密钥由数据库驱动生成或由用户手动导入,列密钥密文存储在数据库服务端。
  • 主密钥:列密钥由主密钥加密,主密钥由外部密钥管理者生成并存储。数据库驱动会自动访问外部密钥管理者,以实现对列密钥进行加解密。

整体流程

在使用全密态数据库的过程中,主要流程包括如下五个阶段,本节介绍整体流程,使用gsql操作密态数据库使用JDBC操作密态数据库章节介绍详细使用流程。

一、生成主密钥阶段:首先,需在华为云密钥服务中,生成主密钥,并准备用于访问主密钥的参数,比如密钥ID、密钥服务账号等。

二、配置阶段:在数据库驱动侧,设置用于访问主密钥的参数。

三、执行DDL阶段:在本阶段,用户可使用密态数据库的密钥语法依次定义主密钥和列密钥,然后定义表并指定表中某列为加密列。定义主密钥和列密钥的过程中,需访问上一阶段生成的主密钥。

四、执行DML阶段:在创建加密表后,用户可直接执行包含但不限于INSERT、SELECT、UPDATE、DELETE等语法,数据库驱动会自动根据上一阶段的加密定义自动对加密列中的数据进行加解密。

五、清理阶段:依次删除加密表、列密钥和主密钥。

生成主密钥阶段

首次使用密态数据库需要执行准备阶段步骤,后续跳过该阶段即可。

密态数据库支持使用不同的外部密钥来管理主密钥,根据场景选择其中一种即可。

  • 华为云场景
    1. 用户需先在打开华为云官网,注册账号,登录账号。
    2. 在华为云中搜索“统一身份认证服务”,进入该服务,如图所示选择“用户”功能,并创建一个IAM用户,为IAM用户设置IAM密码,并为新的IAM用户设置使用“数据加密服务”的权限。

    3. 接下来,请重新回到登录页面,登录方式选择为“IAM用户”,使用新创建的IAM用户进行登录。后续操作均由该IAM用户完成。
    4. 在华为云中搜索“数据加密服务”,进入该服务,如下图所示,选择“密钥管理”功能,并通过“创建密钥”按钮创建密钥,密钥创建成功后,可看到每个密钥都具有1个密钥ID。请记住该密钥ID,在后续执行DDL阶段中创建主密钥语法时,需使用该密钥ID。

    5. 本步生成的密钥即密态数据库中使用的主密钥,该密钥将由华为云密钥管理服务存储。以后执行与加解密相关的SQL语句时,数据库驱动会通过华为云的restful接口自动访问该密钥。

配置阶段

配置访问外部密钥的参数

  • 华为云场景
    通过环境变量配置如下信息:
    export HUAWEI_KMS_INFO='iamUrl=https://iam.{项目}.myhuaweicloud.com/v3/auth/tokens, iamUser={IAM用户名}, iamPassword={IAM用户密钥}, iamDomain={账号名}, kmsProject={项目}'

    在华为云控制台中,点击右上角用户名,并进入“我的凭证”,可看到下图所示页面,该页面可获取上述所需参数:项目、IAM用户名、账号名。另外,请记住本页面的项目ID,在后续执行DDL阶段中创建主密钥语法时,需使用该项目ID。

    图1 华为云参数获取页面
    # 示例
    export HUAWEI_KMS_INFO='iamUrl=https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens, iamUser=test_user, iamPassword=**********, iamDomain=test_account, kmsProject=cn-north-4'

相关文档