完成对已授权接入的云数据库 RDS MySQL 版、云数据库 RDS PostgreSQL 版和云原生数据库 PolarDB MySQL 版(PolarDB for MySQL)的敏感数据分类分级后,如果需要对识别出的敏感列数据进行访问加密,以避免非授权人员通过云平台软件或数据库连接工具直接访问到敏感数据明文,可以使用数据安全中心 DSC(Data Security Center)提供列加密功能。列加密功能可以实现列数据在数据库内可用不可见,有效防御来自云平台外部和内部的安全威胁,让云上数据成为用户的私有资产。
功能说明
数据安全中心的列加密功能包含加密设置和账号权限管理两部分。加密设置定义加密算法和加密的RDS数据库实例、库、表以及列范围,账号权限管理用于管控访问所有已加密列数据的数据库账号及其权限。
支持列加密的数据库
数据库类型 | 版本限制 |
数据库类型 | 版本限制 |
RDS MySQL版 | 大版本为MySQL 5.7或MySQL 8.0,且内核小版本必须大于或等于20240731。 |
RDS PostgreSQL版 | 大版本为PostgreSQL 16,且内核小版本必须大于或等于20241230。 列加密功能对低版本第三方客户端未完全兼容(例如:已加密数据通过数据管理 DMS(Data Management)查看可能会报错),若有需要兼容的,可通过工单或加入钉钉群联系我们进行数据库内核镜像升级。 您可扫描以下二维码加入钉钉群: 升级影响:
|
PolarDB MySQL版 | 大版本为MySQL 5.7或MySQL 8.0,且数据库代理版本必须大于或等于2.8.36。 |
访问加密列数据原理
开启数据库列加密后,使用对应权限的数据库账号查询数据库表中加密列数据时,数据库会返回加密后数据,在客户端应用时才解密为明文数据,使得数据在除了应用客户端以及数据库内的外部流动中全程以密文形式存在。
数据库账号指已授权接入DSC的RDS MySQL版、RDS PostgreSQL版和PolarDB MySQL版的数据库下拉取到的数据库账号。
账号权限说明如下:
权限 | 说明 |
权限 | 说明 |
密文权限(JDBC解密) | 默认访问已加密列数据的密文,支持该账号以SDK方式使用密钥进行解密后查看明文。
|
密文权限(无解密权限) | 仅支持访问已加密列数据的密文,不支持该账号以任何方式进行解密后查看明文。
|
明文权限 | 开启数据库列加密后,设置为明文权限的账号,不受列加密设置影响,可直接明文访问加密列信息。 |
计费说明
DSC为列加密服务免费提供1个字段的加密额度。后续使用该服务,您需要开启列加密服务并购买足够的列加密数,按照包年包月模式计费。计费详情,请参见计费概述。
前提条件
已完成目标RDS或PolarDB数据资产的授权和连接。具体操作,请参见通用数据库授权。
已授权的RDS MySQL实例、RDS PostgreSQL实例或PolarDB MySQL实例已执行敏感数据识别任务,完成敏感数据列识别。具体操作,请参见通过识别任务扫描敏感数据。
总览列加密统计信息
数据库实例接入DSC后,会在DSC控制台的
页面展示已连接的RDS(MySQL版和PostgreSQL版)和PolarDB数据库实例列表,并根据敏感数据扫描和识别结果展示数据库、表、列以及敏感数据统计等信息。登录数据安全中心控制台。
在左侧导航栏,选择
。在数据库实例列表,您可查看RDS和PolarDB实例名称、地域和加密检查等信息。您可以通过列表上方的搜索组件,例如资产类型、加密状态、识别模板、识别模型、敏感等级等,搜索并查看目标数据库实例。
展开目标数据库实例,可以查看该实例下的数据库、表、列以及敏感识别结果信息。
在实例列表左上方,可以查看统计的列总数、敏感列(识别到敏感等级为S3及以上的列数)、已加密列(已开启加密且生效成功的列数)、未加密列以及加密失败(已开启加密但生效失败的列数)。
以上统计数据的列均为数据识别结果中敏感等级为S3及以上的列。
在实例列表右上方,可以查看数据库相关的账号统计以及权限设置。
账号总数:每个数据库的每个账号计为一个数据库账号,例如:A数据库和B数据库均有账号C,则数据库账号数计为两个。
未配置加密:数据库中所有列都未开启加密时,账号权限为未配置加密,该数据库下所有账号正常访问所有列数据。
明文权限或密文权限:开启数据库中列加密后,可设置数据库账号访问加密列数据的权限。
配置列加密
对于
页面显示的数据库实例,加密检查列显示通过,才能配置对应数据库的列加密。如果加密检查列显示未通过,可能是数据库版本或内核版本不支持使用列加密服务,需要您手动升级数据库版本或内核版本。具体内容,请参见本文常见问题。
1. 开启列加密
在左侧导航栏,选择
。您可以选择以下方式,批量加密列或开启单列加密。
一键加密(批量列加密)开启加密(单列加密)单击实例列表上方未加密列的一键加密。
如果实例列表上方的已加密列显示为0,则一键加密按钮,显示在已加密列中。
您也可以在实例列表中,单击目标数据库实例对应操作列的一键加密。
在右侧面板,选择加密参数,然后单击确定。
参数
说明
资产类型
选择RDS或PolarDB。
实例名称
选择需要设置列加密的RDS或PolarDB实例。
加密算法
目前仅支持默认加密算法:AES-128-GCM。
明文权限账号
完成加密配置后,对应数据库下所有账号都默认设置为密文权限。您可以选择加白的账号,使用明文权限访问加密列数据。
配置加密列
选择需要加密的数据库、表和列。
您可以根据搜索组件,例如识别模板、识别模型、敏感等级、库名称、表名称等,搜索待加密列信息。
在数据库实例列表,展开目标实例,找到目标列,单击操作列的开启加密。该列使用默认加密算法:AES-128-GCM进行加密。
2. 修改数据库账号权限
除了已设置为明文权限的账号,PolarDB MySQL和RDS PostgreSQL数据库的其他账号默认为密文权限(JDBC解密)(支持解密后访问明文数据),RDS MySQL数据库的其他账号默认为密文权限(无解密权限)(仅支持访问密文数据)。
对于已配置且成功生效的加密列数据,您可以根据业务场景,修改账号权限为明文访问或密文权限(JDBC解密)。
在
页面,单击账号数据区域的权限设置。您可以在实例列表的操作列,单击编辑,在右侧面板,单击账号权限的配置。
在账号权限设置面板,搜索目标实例和账号,查看当前账号权限。
单击目标账号对应操作列的修改权限。
您也可以选中多个具备相同权限的目标账号,单击列表下方的批量修改权限。
在修改权限对话框,选中目标权限,单击确定。
修改加密列范围
完成加密配置后:
您可以在实例列表的操作列,单击编辑,修改加密列范围。
您也可以在实例列表展开目标实例,在数据库列表,找到目标列名称,单击开启加密或关闭加密,修改加密列。
验证列加密结果
您可以根据已配置数据库列加密和数据库账号权限,验证访问加密列的数据。
RDS PostgreSQL数据库账号仅支持明文权限和密文权限(JDBC解密),列加密数据验证方法与RDS MySQL相同,下文以RDS MySQL为例介绍如何验证访问RDS数据库的加密列数据。
前提条件
RDS MySQL 8.0版本的一个数据库实例已接入DSC进行敏感数据分类分级,扫描结果如下。
配置列加密
参考本文配置列加密的操作步骤,对该数据库实例进行列加密配置:
对数据表users中的手机号码列(phone)开启加密。
对绑定的数据库账号,分别设置以下访问权限。
使用数据库账号访问加密列数据
使用明文权限账号登录数据库。具体操作,请参见通过DMS登录RDS数据库。
执行SELECT语句查看数据表,加密列会返回明文数据。
切换密文权限(无解密权限)账号登录数据库,执行SELECT语句查看数据表,加密列会返回密文数据。
切换密文权限(JDBC解密)账号登录数据库,执行SELECT语句查看数据表,加密列会返回密文数据。
密文权限(JDBC解密)账号具备解密权限,支持通过Java和Go语言应用程序访问数据库中加密列的明文数据。具体内容,请参见本文的通过客户端访问加密列的明文。
前提条件
PolarDB MySQL 5.7版本的一个数据库集群已接入DSC进行敏感数据分类分级,扫描结果如下。
配置列加密
参考本文配置列加密的操作步骤,对该数据库实例进行列加密配置:
对数据表user3中的密码列(password)开启加密。
对绑定的数据库账号,分别设置以下访问权限。
使用数据库账号访问加密列数据
因为使用DMS是通过主地址连接PolarDB MySQL版数据库集群,列加密策略不生效,所以本示例使用命令行通过数据库代理地址连接PolarDB MySQL版数据库集群,来验证列加密结果。
在您的服务器上安装MySQL。您可以访问MySQL官方网站下载和安装适用您服务器的MySQL。
通过以下命令行连接数据库集群。
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
。
执行以下命令查看数据表。
通过命令行
use <数据库名>;
,进入目标数据库。本示例选择数据库sddp_test。use sddp_test;
执行SELECT语句查看数据表。
SELECT * FROM user3 LIMIT 0, 3;
返回结果示例:
明文权限账号,加密列返回明文数据。
密文权限(JDBC解密)账号,加密列返回密文数据。
密文权限(JDBC解密)账号具备解密权限,支持通过Java和Go语言应用程序访问数据库中加密列的明文数据。具体内容,请参见本文的通过客户端访问加密列的明文。
通过客户端访问加密列的明文
配置列加密后的数据在数据库中以密文形式存储,但通过授权的客户端可以透明地解密并访问明文数据。
阿里云提供了Java和Go语言的全密态客户端驱动程序,可实现对数据库中加密列明文数据的访问。您可以使用具备密文权限(JDBC解密)的数据库账号访问目标数据库中加密列的明文数据。
编程语言 | 支持的数据库类型 | 相关文档 |
编程语言 | 支持的数据库类型 | 相关文档 |
Java |
| |
Go |
|
常见问题
- 本页导读 (1)
- 功能说明
- 支持列加密的数据库
- 访问加密列数据原理
- 计费说明
- 前提条件
- 总览列加密统计信息
- 配置列加密
- 1. 开启列加密
- 2. 修改数据库账号权限
- 修改加密列范围
- 验证列加密结果
- 通过客户端访问加密列的明文
- 常见问题
- Q:为什么在列加密页面找不到已授权接入的RDS实例和PolarDB实例?
- Q:RDS实例和PolarDB实例的加密检查“未通过”怎么办?