使用全密态PolarMySQL

DBA或开发人员等高权限角色在维护数据库时,可能接触到生产环境中的敏感数据(如用户身份信息、交易记录),存在数据泄露风险。PolarDB MySQL全密态PolarMySQL功能,能够在数据库代理(Proxy)层对查询结果进行实时加密,确保只有经过授权的应用(通过特定驱动)才能解密和访问敏感数据。此功能可在修改少量应用代码的情况下,实现对敏感数据的安全保护,满足合规性要求。

工作原理

全密态PolarMySQL功能在数据库代理(Proxy)层生效。当一个SQL查询命中已设定的加密策略时,代理层会在将查询结果返回给客户端前,对指定字段的数据进行加密。

  • 数据存储:此功能不改变数据库中数据的物理存储状态,即在操作系统(Operating System,OS)文件与云盘上以明文形式存在。

  • 使用者视角

    • 超级管理员:查询结果始终为明文,不受加密策略影响,便于数据库管理。

    • 普通用户:查询结果为密文。需配合使用特定的加密驱动(如,EncJDBC驱动GoLang驱动)和正确的密钥才能在客户端解密数据。

    • 其他用户:查询结果为密文,且无法解密,即使拥有密钥。

适用范围

PolarDB MySQL集群的数据库代理(Proxy)版本需为2.9.12及以上。

说明
  • 查看版本号:您可在集群的配置与管理 > 版本管理中查看当前集群的数据库代理(Proxy)版本。

  • 版本兼容性:数据库代理版本低于2.9.12但高于2.8.18,则加密规则的配置界面是与动态脱敏功能合并在一起的。为获得最佳体验和功能独立性,建议您升级至2.9.12或更高版本。

配置动态加密

配置动态加密主要包括三个步骤:配置密钥、定义角色权限、创建加密策略。

操作流程

  1. 前往PolarDB控制台,在左侧导航栏单击集群列表,选择集群所在地域,并单击目标集群ID进入集群详情页。

  2. 在左侧导航栏中,单击配置与管理 > 安全管理,并进入加密页签进行操作。

步骤一:配置密钥

加密页面,单击密钥管理开关。以配置用于应用程序加密和解密的密钥。

  • 使用KMS密钥(推荐)
    通过阿里云密钥管理服务(KMS)托管密钥,支持密钥轮转(自动更新密钥),提供了高安全性和可维护性。即使访问KMSAK发生泄露,也可以通过禁用AK或收紧权限策略来控制风险,密钥本身不会泄露。

  • 使用自持密钥
    如未配置KMS,系统将默认采用自持密钥模式,您需自行生成、分发及保管密钥。

    重要

    自持密钥存在丢失和泄露风险。密钥一旦丢失,对应的加密数据将无法解密,需建立严格的安全流程来管理密钥。

image

步骤二:定义角色权限

加密页面的客户角色权限设置页签,配置不同数据库账号的角色,以决定其查询数据时看到的是明文还是密文。

  1. 单击新建角色权限策略

  2. 角色权限设置弹窗中,设置权限策略名称和角色的数据库账号。

    1. 权限策略名称:指定策略名称。字符长度不能超过64个字符。

    2. 超级管理员:单击复选框,选择数据库账号,支持多选。此列表中的数据库账号查询结果将始终为明文。

      说明

      超级管理员角色拥有最高权限,仅将必要的管理账号或审计账号加入此列表,并严格控制其使用。

    3. 普通用户:单击复选框,选择数据库账号,支持多选。此列表中的数据库账号查询结果为密文,但可以使用特定的加密驱动与密钥进行解密。

    说明

    其他用户:未在以上两个角色列表中配置的任何数据库账号。查询结果为密文,且无法解密。

image

步骤三:创建并启用加密策略

加密页面的加密策略设置页签,配置加密策略。

  1. 单击新建加密策略

  2. 在弹出的对话框中,根据下表配置策略参数。

    说明

    建议精确指定加密范围:创建策略时,应始终明确指定数据库名、表名与字段名,避免使用所有数据库或所有表的配置,以防影响无关业务。

    参数

    说明

    规则名称

    必填。策略的唯一标识,例如encrypt-user-email。长度不超过64个字符。

    规则描述

    选填。策略的详细说明,例如加密customeruser表中的email字段。长度不超过64个字符。

    启/禁规则

    控制策略生效的开关。新建时默认启用,且不可修改。如需调整,可在新建后进行相应修改。

    关联权限策略

    必填。选择在步骤二中定义的角色权限

    数据库

    选填。指定策略生效的数据库。支持如下选型:

    • (默认)所有数据库:对集群内所有数据库生效。

    • 填写指定数据库:仅对指定的数据库生效,多个库名用英文逗号,分隔。

    表名

    选填。指定策略生效的表。支持如下选型:

    • (默认)所有表:对指定数据库内的所有表生效。

    • 填写指定表:仅对指定的表生效,多个表名用英文逗号,分隔。

    字段名

    必填。需要加密的字段名称,多个字段名用英文逗号,分隔。

    加密算法

    必填。选择用于加密的算法。目前支持的算法有:

    • SM4系列:SM4-128-CBCSM4-128-ECBSM4-128-GCMSM4-128-GTR

    • AES-128系列:AES-128-CBCAES-128-ECBAES-128-GCMAES-128-GTR

    • AES-256系列:AES-256-CBCAES-256-ECBAES-256-GCMAES-256-GTR

  3. 单击确定完成创建。

步骤四:管理加密策略

加密页面的加密策略设置页签,您可以在策略列表中,可对已创建的策略进行管理。

  • 修改策略:找到目标规则,在操作列单击修改

  • 删除策略:找到目标规则,在操作列单击删除,并在弹出的对话框中单击确定

  • 启/禁策略:找到目标规则,单击启/禁规则列的开关。

权限收敛与安全加固

为防止拥有控制台权限的DBA或开发人员恶意篡改或删除加密策略,您可使用RAM(访问控制)进行权限加固。

核心思路

为相关人员创建独立的RAM用户,并授予其管理PolarDB的权限,但明确拒绝其修改或删除加密策略的权限。

操作说明

  1. 创建禁用修改策略

    1. 登录RAM控制台,在左侧导航栏选择权限管理>权限策略,并单击创建权限策略。创建一条自定义权限策略。

    2. 在可视化编辑页签中,进行如下配置:

      • 效果拒绝

      • 服务云原生数据库 PolarDB

      • 操作:选择指定操作,在写操作中选择polardb:ModifyMaskingRules 和 polardb:DeleteMaskingRules

      • 资源条件:设置当前策略授权的具体对象与生效条件,具体请参考权限策略基本元素

      • 配置完成后,单击确定。在创建权限策略弹窗中,设置策略名称备注

  2. 配置RAM用户权限

    1. 登录RAM控制台,在左侧导航栏选择身份管理>用户,找到目标RAM用户,单击操作列的添加权限

    2. 权限策略区域中,选择上述创建的禁用修改策略,并单击确认新增授权

效果展示

被限制的RAM用户在尝试修改或删除加密策略时,将收到权限不足的错误提示。image

后续步骤

配置好加密规则后,应用程序需通过集成了加密功能的JDBC驱动(EncJDBC)GoLang驱动才能正确读写加密数据。

常见问题

配置了加密策略,为什么用数据库客户端查询时看到的还是明文?

需检查登录数据库所使用的账号。如果该账号被配置为超级管理员,为方便管理,其查询结果将始终为明文。使用被配置为普通用户的账号进行测试,即可看到密文结果。

如何验证加密是否生效?

使用一个未配置在超级管理员列表中的数据库账号,通过常规的MySQL客户端(如命令行或Navicat)连接数据库并查询加密字段。如果您看到的是密文结果,则证明已在数据库代理(Proxy)层对查询结果进行实时加密。

超级管理员角色有什么风险?

超级管理员角色可以直接读取明文数据,完全绕过了加密保护。仅建议在数据订正、迁移、审计等绝对必要的场景下,临时使用此角色,并在事后立即移除相关账号,同时做好完整的操作审计。