配置数据库的列加密

数据安全中心 DSC(Data Security Center)支持对RDS MySQL、RDS PostgreSQL、PolarDB MySQLPolarDB PostgreSQL等数据库类型的数据列进行加密配置,确保数据库中敏感列数据加密后存储,并支持授权用户通过全密态客户端解密后访问加密列的明文数据。

重要
  • 列加密功能仅适用于数据安全中心的免费版高级版企业版、7天试用版以及仅采购增值服务版的用户。

  • 使用客户端通过SQL查询加密字段时,不考虑原字段数据类型,返回的数据均会以字符串形式呈现,请谨慎配置列加密。

前提条件

  • 购买数据安全中心,且购买足够的列加密授权配额。如果您未开通列加密功能或列加密授权配额不足,您可以进行版本升级

  • 确保实例所在地域支持列加密功能。详细信息,请参见支持的地域

数据库加密限制

支持的数据库类型

支持的版本

支持的加密算法

支持的加密方式

支持的权限

RDS MySQL

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

  • AES-128-GCM。

  • AES-256-GCM:内核小版本大于或等于20241231时才支持。

  • 本地密钥。

  • KMS密钥:内核小版本大于或等于20241231,并且存储类型为云盘时才支持。

  • 密文权限(无解密权限):仅使用本地密钥支持,为默认权限。

  • 密文权限(JDBC解密):使用KMS密钥时为默认权限。

  • 明文权限。

RDS PostgreSQL

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

AES-256-GCM。

本地密钥。

  • 密文权限(JDBC解密)(默认权限)。

  • 明文权限。

PolarDB MySQL

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

重要

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

AES-128-GCM。

本地密钥。

PolarDB PostgreSQL

大版本为PostgreSQL 14,且数据库版本大于等于2.0.14.15.31.0

AES-256-GCM。

本地密钥。

操作步骤

开通DSC实例后,首次登录控制台使用数据库列加密功能时,需依次完成以下步骤:授权DSC访问云资源授权并连接数据库资产、执行敏感数据识别任务开启列加密功能。

步骤一:授权DSC访问云资源

完成授权后,DSC实例才能访问OSS、RDS、MaxCompute等云服务的资源。

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

  2. RAM授权对话框中,单击立即授权

步骤二:授权数据库资产

在使用DSC检测云产品(包括RDS、PolarDB等)中存在的敏感数据或审计数据库活动前,您需要先完成资产实例授权。

  1. 在左侧导航栏,选择资产中心

  2. 授权管理页签中,单击资产授权管理

  3. 资产授权管理页面左侧产品名称导航栏中,选择需要授权的数据类型,并单击资产同步

    说明

    购买DSC实例后,首次登录控制台会立即执行云上资产列表同步任务,此时无需执行资产同步操作。后续新增的数据资产DSC会每天凌晨进行扫描并自动同步到对应资产的未授权列表中。存量用户则需要在资产中心 > 授权管理页签中的资产授权管理,手动执行资产同步操作。

  4. 单击目标资产操作列的授权

    需要批量授权时,选中目标资产,并单击批量授权

步骤三:连接数据库

选择合适的方式连接您的数据库,才能实现列加密功能。支持一键连接账密连接

说明

您可以根据下表中对应的数据库支持的连接方式和数据安全需要选择合适的连接方式。

  • 如果您的数据库类型支持一键连接,且您没有将当前数据库作为脱敏任务目标数据库的需求,建议您使用一键连接方式。

  • 如果需将数据库作为脱敏任务的目标库,您必须要选择账密连接方式,并使用具有读写权限的账号连接数据库。

连接类型

说明

支持的数据资产类型

一键连接

通过控制台按钮一键连接数据库。

在连接过程中,DSC会自动在目标数据资产中添加只读账号,通过该账号连接目标数据库进行数据识别任务;由于该账号仅具有只读权限,一键授权的数据库无法成为脱敏任务的目标数据库。

  • RDS:

    • MySQL

    • SQL Server(只读实例不支持)

    • MariaDB(只读实例不支持)

  • PolarDB:

    • MySQL

  • PolarDB-X 1.0(DRDS)

  • PolarDB-X 2.0

  • OSS

  • TableStore

  • TableStore

  • SLS

账密连接

通过手工输入数据库的账号、密码连接数据库。

  • 通过只读账号进行数据库连接后,该数据库可正常进行敏感数据识别、脱敏及审计任务,但无法作为脱敏任务的目标数据库;

  • 通过支持读写的账号进行数据库连接后,该数据库可作为脱敏任务的目标数据库来存储脱敏后的数据。

  • 结构化数据:

    RDS、PolarDB、PolarDB-X(原DRDS)、PolarDB-X 2.0、MongoDB、OceanBase、自建数据库

  • 大数据:

    AnalyticDB-MySQL、AnalyticDB for PostgreSQL(即AnalyticDB-PG)

一键连接

  1. 在左侧导航栏,选择资产中心

  2. 授权管理页签中,单击目标资产实例操作列的一键连接

  3. 在对话框中勾选立即扫描数据资产并进行数据识别,并单击确定

    重要
    • 勾选立即扫描数据资产并进行数据识别,DSC会自动创建并立即执行系统默认识别任务。识别任务会读取数据库中的数据,消耗数据库读性能,建议您在业务低峰期执行一键连接操作。

    • 未勾选立即扫描数据资产并进行数据识别,您可以前往导航栏中选择分类分级 > 任务管理,在识别任务页签中的系统默认任务列表中执行重扫,手动执行系统默认任务。

  4. 单击数据库实例左侧的展开图标图标,查看数据库的连接状态和功能状态。

账密连接

选择账密连接时,请遵循权限最小化原则,使用独立的数据库账号和密码。

  1. 在左侧导航栏,选择资产中心

  2. 授权管理页签中,单击目标资产实例操作列的账密连接

  3. 账密连接面板,单击目标数据库操作列的添加凭据

  4. 添加凭据对话框,选择凭据,保持选中或取消选中立即扫描数据资产并进行数据识别,单击确定

    若您未创建凭据,需要在添加凭据对话框中单击新建凭据页签,配置数据库登录账号凭证的凭据名称用户名密码凭据类型,并单击确定

    重要
    • 勾选立即扫描数据资产并进行数据识别,DSC会自动创建并立即执行系统默认识别任务。识别任务会读取数据库中的数据,消耗数据库读性能,建议您在业务低峰期执行一键连接操作。

    • 未勾选立即扫描数据资产并进行数据识别,您可以前往导航栏中选择分类分级 > 任务管理,在识别任务页签中的系统默认任务列表中执行重扫,手动执行系统默认任务。

  5. 单击数据库实例左侧的展开图标图标,查看数据库的连接状态和功能状态。

    image

步骤四:查看待加密数据库信息

数据识别任务扫描完成后,查看已成功接入DSC的数据库实例信息,包括总列数列加密情况数据库账号信息等。

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

  2. 列加密页面查看以下信息。您可通过数据库列表上方的搜索组件,例如资产类型、加密状态(已加密列、未加密列或加密失败)、敏感等级等搜索并查看目标数据库实例信息。

    image

    页面信息

    说明

    总列数

    已成功接入DSC的数据库实例包含的数据库表中的总列数。

    敏感数据(S3及以上)

    数据识别结果中敏感等级为S3及以上的列。其中包含敏感列,已加密列,未加密列,加密失败等信息。

    账号数据

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

    • 未配置加密:数据库中所有列都未开启加密时,账号权限为未配置加密

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

    您可以单击以上统计项的任意数字或单击权限设置,在账号权限设置面板,搜索并查看目标数据库实例下的所有账号信息,以确认为不同数据库账号设置不同访问权限。

    列表信息

    展示DSC实例名称资产类型地域加密算法明文权限账号加密检查等信息。

    • 仅支持对加密检查通过的实例配置列加密。

    • 加密检查结果为“未通过”。如果数据库版本不兼容,请先单击加密检查列的前往升级,跳转到RDSPolarDB控制台对应的升级页面,升级数据库版本。具体操作请参见检查失败常见问题

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

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

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

步骤五:配置列加密

确认目标数据库实例信息且加密检查显示通过后,完成列加密配置。

开启一键加密

未开启数据库的一键加密前,数据库的加密算法和加密方式未配置,此时不支持对数据库的单列开启加密。

  1. 单击数据库实例列表上方的一键加密,为所有未加密列配置列加密。

    或着您也可以单击目标数据库实例对应操作列的一键加密,为目标数据库实例配置列加密。

    image

  2. 加密配置面板,选择待加密的资产类型实例名称加密算法加密方式明文权限账号以及选择需要配置列加密的目标,然后单击确定

    image

    您需注意以下参数配置:

    • 加密方式

      如果加密方式KMS密钥,需提前在密钥管理服务创建对称密钥

      image

      重要

      完成列加密配置后,如果修改加密方式,DSC系统会重启加密任务,重启过程中原加密列数据将以明文形式存储存在数据暴露的安全风险。建议您选择确定的加密方式,以免修改时影响数据安全性

    • 明文权限账号

      完成加密配置后,对应数据库下所有账号都默认设置为密文权限

      • PolarDB MySQL、PolarDB PostgreSQLRDS PostgreSQL数据库账号默认为密文权限(JDBC解密),默认访问密文数据,支持通过全密态客户端解密后访问明文数据。

      • RDS MySQL数据库的加密方式KMS密钥时,数据库账号默认为密文权限(JDBC解密)

      • RDS MySQL数据库的加密方式本地密钥时,数据库账号默认为密文权限(无解密权限),仅支持访问密文数据。

      您可以选择加白的账号,使用明文权限直接访问加密列的明文数据。

      重要

      数据库授权接入DSC时,如果通过一键连接,会自动创建前缀为sddp_auto数据库账号;如果通过账密连接,会在凭据中设置一个数据库账号,该数据库账号支持DSC读取数据库数据进行敏感数据分类分级扫描。因此,如果您需要继续对数据库最新数据进行敏感数据分类分级,必须设置该数据库账号明文权限账号

其他操作

修改数据库账号权限

除了已设置为明文权限的账号,数据库实例的其他账号均为密文权限。您可以根据业务场景需要,修改账号权限为明文权限密文权限(无解密权限)密文权限(JDBC解密)

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

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

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

    说明

    若新增数据库账号未在列表中显示,请先完成资产同步后再查看。

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

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

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

修改加密列配置

完成加密配置后:

  • 在实例列表展开目标实例,在数据库列表,找到目标名称,单击开启加密关闭加密,配置单列加密。

    image

  • 在实例列表的操作列,单击编辑,然后在编辑配置面板,修改加密算法、加密方式和加密列范围。

    image

    • 单击加密算法加密方式修改,更新加密算法或加密方式。

      重要

      修改加密方式会重启加密任务,重启过程中原加密列数据将以明文形式存储存在数据暴露的安全风险。请谨慎操作

    • 在配置加密列的数据库列表,找到目标名称,单击开启加密关闭加密,更新加密列范围。

MySQL列加密示例

您可以根据已配置数据库列加密和数据库账号权限,验证访问加密列的数据。使用密文权限账号访问加密列数据返回是密文,表示数据库列加密配置生效。

说明

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

RDS MySQL数据库列加密示例

前提条件

RDS MySQL 8.0版本的一个数据库实例已接入DSC并完成敏感数据分类分级,扫描结果如下图所示。

image

配置列加密

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

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

    image

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

    image

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

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

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

    image

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

    image

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

    image

PolarDB MySQL数据库列加密示例

前提条件

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

image

配置列加密

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

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

    image

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

    image

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

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

  1. 在服务器上安装与操作系统及版本适配的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语言的全密态客户端解密并访问。

编程语言

支持的数据库类型

相关文档

Java

  • RDS MySQL

  • RDS PostgreSQL

  • PolarDB MySQL

  • PolarDB PostgreSQL

集成EncJDBC(支持使用本地密钥和KMS密钥解密)

Go

  • RDS MySQL

  • PolarDB MySQL

集成GoLang驱动(仅支持使用本地密钥解密)

检查失败常见问题

相关文档