配置数据库中列加密

更新时间:2025-03-19 10:26:11

完成对已授权接入的云数据库 RDS MySQL 版云数据库 RDS PostgreSQL 版云原生数据库 PolarDB MySQL 版(PolarDB for MySQL)的敏感数据分类分级后,如果需要对识别出的敏感列数据进行访问加密,以避免非授权人员通过云平台软件或数据库连接工具直接访问到敏感数据明文,可以使用数据安全中心 DSC(Data Security Center)提供列加密功能。列加密功能可以实现列数据在数据库内可用不可见,有效防御来自云平台外部和内部的安全威胁,让云上数据成为用户的私有资产。

功能说明

数据安全中心的列加密功能包含加密设置和账号权限管理两部分。加密设置定义加密算法和加密的RDS数据库实例、库、表以及列范围,账号权限管理用于管控访问所有已加密列数据的数据库账号及其权限。

支持列加密的数据库

数据库类型

版本限制

数据库类型

版本限制

RDS MySQL

大版本为MySQL 5.7MySQL 8.0,且内核小版本必须大于或等于20240731。

RDS PostgreSQL

大版本为PostgreSQL 16,且内核小版本必须大于或等于20241230。

说明

列加密功能对低版本第三方客户端未完全兼容(例如:已加密数据通过数据管理 DMS(Data Management)查看可能会报错),若有需要兼容的,可通过工单或加入钉钉群联系我们进行数据库内核镜像升级。

您可扫描以下二维码加入钉钉群:

47cc740b9cfd76a2347c81afa41285ba

升级影响:

  • 对于基础版实例,内核镜像更换需要重启实例。

  • 对于高可用或集群版实例,需要进行HA切换,会有分钟级别的闪断。

  • 由于内核镜像的更新,原有加密策略可能需要重新导入生效。

PolarDB MySQL

大版本为MySQL 5.7MySQL 8.0,且数据库代理版本必须大于或等于2.8.36。

重要

如果设置PolarDB MySQL数据库的列加密策略,必须使用数据库代理地址(可读可写模式)连接数据库。如果使用主地址,会导致列加密策略不生效。具体操作,请参见配置数据库代理管理连接地址

访问加密列数据原理

开启数据库列加密后,使用对应权限数据库账号查询数据库表中加密列数据时,数据库会返回加密后数据,在客户端应用时才解密为明文数据,使得数据在除了应用客户端以及数据库内的外部流动中全程以密文形式存在。

数据库账号指已授权接入DSCRDS MySQL版、RDS PostgreSQL版和PolarDB MySQL版的数据库下拉取到的数据库账号。

账号权限说明如下:

权限

说明

权限

说明

密文权限(JDBC解密)

默认访问已加密列数据的密文,支持该账号以SDK方式使用密钥进行解密后查看明文。

  • 开启PolarDB MySQLRDS PostgreSQL的数据库的列加密后,对应数据库下所有账号的权限默认设置为此权限。

  • RDS MySQL的数据库的账号支持设置为此权限。

密文权限(无解密权限)

仅支持访问已加密列数据的密文,不支持该账号以任何方式进行解密后查看明文。

  • 开启RDS MySQL的数据库的列加密后,该数据库下所有账号的权限默认设置为此权限。

  • PolarDB MySQLRDS PostgreSQL的数据库的账号不支持设置为此权限。

明文权限

开启数据库列加密后,设置为明文权限的账号,不受列加密设置影响,可直接明文访问加密列信息。

image

计费说明

DSC为列加密服务免费提供1个字段的加密额度。后续使用该服务,您需要开启列加密服务并购买足够的列加密数,按照包年包月模式计费。计费详情,请参见计费概述

前提条件

总览列加密统计信息

数据库实例接入DSC后,会在DSC控制台的数据治理 > 列加密页面展示已连接的RDS(MySQL版和PostgreSQL版)和PolarDB数据库实例列表,并根据敏感数据扫描和识别结果展示数据库、表、列以及敏感数据统计等信息。

  1. 登录数据安全中心控制台

  2. 在左侧导航栏,选择风险治理 > 列加密

  3. 在数据库实例列表,您可查看RDSPolarDB实例名称、地域和加密检查等信息。您可以通过列表上方的搜索组件,例如资产类型、加密状态、识别模板、识别模型、敏感等级等,搜索并查看目标数据库实例。

    展开目标数据库实例,可以查看该实例下的数据库、表、列以及敏感识别结果信息。

    image

  4. 在实例列表左上方,可以查看统计的列总数、敏感列(识别到敏感等级为S3及以上的列数)、已加密列(已开启加密且生效成功的列数)、未加密列以及加密失败(已开启加密但生效失败的列数)。

    说明

    以上统计数据的列均为数据识别结果中敏感等级为S3及以上的列。

  5. 在实例列表右上方,可以查看数据库相关的账号统计以及权限设置。

    账号总数:每个数据库的每个账号计为一个数据库账号,例如:A数据库和B数据库均有账号C,则数据库账号数计为两个。

    未配置加密:数据库中所有列都未开启加密时,账号权限为未配置加密,该数据库下所有账号正常访问所有列数据。

    明文权限密文权限:开启数据库中列加密后,可设置数据库账号访问加密列数据的权限。

配置列加密

对于数据治理 > 列加密页面显示的数据库实例,加密检查列显示通过,才能配置对应数据库的列加密。

说明

如果加密检查列显示未通过,可能是数据库版本或内核版本不支持使用列加密服务,需要您手动升级数据库版本或内核版本。具体内容,请参见本文常见问题

1. 开启列加密

  1. 在左侧导航栏,选择风险治理 > 列加密

  2. 您可以选择以下方式,批量加密列或开启单列加密。

    一键加密(批量列加密)
    开启加密(单列加密)
    1. 单击实例列表上方未加密列一键加密

      说明

      如果实例列表上方的已加密列显示为0,则一键加密按钮,显示在已加密列中。

      您也可以在实例列表中,单击目标数据库实例对应操作列的一键加密

    2. 在右侧面板,选择加密参数,然后单击确定

      image

      参数

      说明

      资产类型

      选择RDSPolarDB。

      实例名称

      选择需要设置列加密的RDSPolarDB实例。

      加密算法

      目前仅支持默认加密算法:AES-128-GCM

      明文权限账号

      完成加密配置后,对应数据库下所有账号都默认设置为密文权限。您可以选择加白的账号,使用明文权限访问加密列数据。

      配置加密列

      选择需要加密的数据库、表和列。

      您可以根据搜索组件,例如识别模板、识别模型、敏感等级、库名称、表名称等,搜索待加密列信息。

    在数据库实例列表,展开目标实例,找到目标列,单击操作列的开启加密。该列使用默认加密算法:AES-128-GCM进行加密。

    image

2. 修改数据库账号权限

除了已设置为明文权限的账号,PolarDB MySQLRDS PostgreSQL数据库的其他账号默认为密文权限(JDBC解密)(支持解密后访问明文数据),RDS MySQL数据库的其他账号默认为密文权限(无解密权限)(仅支持访问密文数据)。

对于已配置且成功生效的加密列数据,您可以根据业务场景,修改账号权限为明文访问密文权限(JDBC解密)

  1. 风险治理 > 列加密页面,单击账号数据区域的权限设置

    您可以在实例列表的操作列,单击编辑,在右侧面板,单击账号权限配置

  2. 账号权限设置面板,搜索目标实例和账号,查看当前账号权限。

  3. 单击目标账号对应操作列的修改权限

    您也可以选中多个具备相同权限的目标账号,单击列表下方的批量修改权限

  4. 在修改权限对话框,选中目标权限,单击确定

修改加密列范围

完成加密配置后:

  • 您可以在实例列表的操作列,单击编辑,修改加密列范围。

  • 您也可以在实例列表展开目标实例,在数据库列表,找到目标名称,单击开启加密关闭加密,修改加密列。

验证列加密结果

您可以根据已配置数据库列加密和数据库账号权限,验证访问加密列的数据。

说明

RDS PostgreSQL数据库账号仅支持明文权限密文权限(JDBC解密),列加密数据验证方法与RDS MySQL相同,下文以RDS MySQL为例介绍如何验证访问RDS数据库的加密列数据。

RDS MySQL数据库列加密示例
PolarDB MySQL数据库列加密示例

前提条件

RDS MySQL 8.0版本的一个数据库实例已接入DSC进行敏感数据分类分级,扫描结果如下。

image

配置列加密

参考本文配置列加密的操作步骤,对该数据库实例进行列加密配置:

  • 对数据表users中的手机号码列(phone)开启加密。

    image

  • 对绑定的数据库账号,分别设置以下访问权限。

    image

使用数据库账号访问加密列数据

  1. 使用明文权限账号登录数据库。具体操作,请参见通过DMS登录RDS数据库

  2. 执行SELECT语句查看数据表,加密列会返回明文数据。

    image

  3. 切换密文权限(无解密权限)账号登录数据库,执行SELECT语句查看数据表,加密列会返回密文数据。

    image

  4. 切换密文权限(JDBC解密)账号登录数据库,执行SELECT语句查看数据表,加密列会返回密文数据。

    密文权限(JDBC解密)账号具备解密权限,支持通过JavaGo语言应用程序访问数据库中加密列的明文数据。具体内容,请参见本文的通过客户端访问加密列的明文

    image

前提条件

PolarDB MySQL 5.7版本的一个数据库集群已接入DSC进行敏感数据分类分级,扫描结果如下。

image

配置列加密

参考本文配置列加密的操作步骤,对该数据库实例进行列加密配置:

  • 对数据表user3中的密码列(password)开启加密。

    image

  • 对绑定的数据库账号,分别设置以下访问权限。

    image

使用数据库账号访问加密列数据

因为使用DMS是通过主地址连接PolarDB MySQL版数据库集群,列加密策略不生效,所以本示例使用命令行通过数据库代理地址连接PolarDB MySQL版数据库集群,来验证列加密结果。

  1. 在您的服务器上安装MySQL。您可以访问MySQL官方网站下载和安装适用您服务器的MySQL。

  2. 通过以下命令行连接数据库集群。

    mysql -h<连接地址> -P<端口> -u<用户名> -p<密码>
    • 连接地址和端口:使用集群地址,且确保您的服务器能访问该地址。配置和查看连接地址的详细内容,请参见配置数据库代理管理连接地址

    • 用户名和密码:本示例分别使用数据库绑定的具备明文权限密文权限(JDBC解密)的数据库账号和密码。

    连接命令行示例:

    • 使用明文权限账号:mysql -hpc-bp1fd7********v6f.rwlb.rds.aliyuncs.com -P3306 -usddp_polardb -pH********4

    • 使用密文权限(JDBC解密)账号:mysql -hpc-bp1fd7********v6f.rwlb.rds.aliyuncs.com -P3306 -usddp_03 -pP********3

  3. 执行以下命令查看数据表。

    1. 通过命令行use <数据库名>;,进入目标数据库。本示例选择数据库sddp_test。

      use sddp_test;
    2. 执行SELECT语句查看数据表。

      SELECT * FROM user3 LIMIT 0, 3;

    返回结果示例:

    • 明文权限账号,加密列返回明文数据。

      image

    • 密文权限(JDBC解密)账号,加密列返回密文数据。

      image

      密文权限(JDBC解密)账号具备解密权限,支持通过JavaGo语言应用程序访问数据库中加密列的明文数据。具体内容,请参见本文的通过客户端访问加密列的明文

通过客户端访问加密列的明文

配置列加密后的数据在数据库中以密文形式存储,但通过授权的客户端可以透明地解密并访问明文数据。

阿里云提供了JavaGo语言的全密态客户端驱动程序,可实现对数据库中加密列明文数据的访问。您可以使用具备密文权限(JDBC解密)的数据库账号访问目标数据库中加密列的明文数据。

编程语言

支持的数据库类型

相关文档

编程语言

支持的数据库类型

相关文档

Java

  • RDS MySQL

  • RDS PostgreSQL

  • PolarDB MySQL

集成EncJDBC

Go

  • RDS MySQL

  • PolarDB MySQL

集成GoLang驱动

常见问题

Q:为什么在列加密页面找不到已授权接入的RDS实例和PolarDB实例?

A:如果已授权接入的RDS数据库和PolarDB数据库不满足要求(RDS必须为MySQLPostgreSQL,PolarDB必须为MySQL类型),在风险治理 > 列加密页面,不显示对应RDS实例和PolarDB实例。

Q:RDS实例和PolarDB实例的加密检查“未通过”怎么办?

A

  • RDS实例

    如果已授权接入的RDS MySQL数据库的版本不是5.78.0、内核版本小于20240731或为只读实例,加密检查列会显示未通过

    如果已授权接入的RDS PostgreSQL数据库的版本不是PostgreSQL 16、内核版本小于20241230或为只读实例,加密检查列会显示未通过

    • 数据库版本不支持

      如果确认目标RDS数据库需要进行列加密配置,您可以单击前往升级,跳转到RDS控制台的对应目标实例的升级页面,升级数据库版本。具体说明,请参见升级数据库版本(MySQL)升级数据库大版本(PostgreSQL)

    • 内核版本不支持

      image

      如果确认目标RDS数据库需要进行列加密配置,您可以单击升级数据库内核,选择升级版本升级时间,然后单击确定,进行内核版本升级。详细说明,请参见升级内核小版本(MySQL)升级内核小版本(PostgreSQL)。完成数据库内核升级后,该RDS数据库才支持开启列加密。

      image

    • 只读实例

      由于创建只读实例时会从备实例复制数据,数据与主实例一致,主实例的数据更新也会在主实例完成操作后立即自动同步到所有只读实例,因此您可以在主实例进行列加密配置。

  • PolarDB实例

    如果已授权接入的PolarDB MySQL数据库的版本不是5.78.0,或者数据库代理版本小于2.8.36,加密检查列会显示未通过

    • 数据库版本不支持

      如果确认目标PolarDB MySQL数据库需要进行列加密配置,您可以单击前往升级,跳转到PolarDB控制台的对应目标集群的升级页面,升级数据库版本。具体操作,请参见大版本升级

    • 数据库代理版本不支持

      如果确认目标PolarDB MySQL数据库需要进行列加密配置,您可以单击升级数据库内核,选择升级版本升级时间后,单击确定,进行代理版本升级。具体操作,请参见版本管理。完成数据库代理版本升级后,该PolarDB数据库才支持开启列加密。

完成版本升级后,您需要在DSC控制台完成资产同步操作,同步数据库最新信息。

  1. 在左侧导航栏,选择资产中心,然后在授权管理页签,单击资产授权管理

  2. 资产授权管理面板左侧产品名称导航栏,单击目标实例类型(RDSPolarDB)。

  3. 资产授权管理面板中,单击资产同步

  • 本页导读 (1)
  • 功能说明
  • 支持列加密的数据库
  • 访问加密列数据原理
  • 计费说明
  • 前提条件
  • 总览列加密统计信息
  • 配置列加密
  • 1. 开启列加密
  • 2. 修改数据库账号权限
  • 修改加密列范围
  • 验证列加密结果
  • 通过客户端访问加密列的明文
  • 常见问题
  • Q:为什么在列加密页面找不到已授权接入的RDS实例和PolarDB实例?
  • Q:RDS实例和PolarDB实例的加密检查“未通过”怎么办?
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等