AWS RDS MySQL 5.7安装data_masking插件报1126无法打开共享库错误如何解决
问题原因排查
- AWS RDS MySQL作为托管型数据库服务,不支持用户手动上传、安装未被官方纳入支持列表的自定义插件/共享库。执行
INSTALL PLUGIN命令要求对应的.so文件已经存放在MySQL的plugin_dir系统目录下,但RDS不开放底层服务器文件系统的写入权限,你无法将data_masking.so放到指定目录,所以触发1126共享库读取失败报错。 - 额外说明:你参考的MySQL 5.7官方文档中的data_masking是MySQL企业版专属功能,开源社区版MySQL本身并不自带该插件,即使是自建MySQL实例,也需要额外获取企业版对应的库文件才能完成安装,RDS MySQL社区版默认也不包含该企业版组件。
解决方案
方案1:使用RDS原生支持的动态数据掩码功能
AWS RDS MySQL从5.7.34、8.0.25版本开始已经官方内置了动态数据掩码能力,无需手动安装插件,直接修改表字段定义即可启用:
- 给需要掩码的字段添加对应掩码策略,示例:
-- 字符串类型字段使用掩码,仅显示首尾1位,中间用*填充 ALTER TABLE 表名 MODIFY COLUMN 字段名 VARCHAR(255) MASKED WITH (FUNCTION = 'mask_inner(1,1)'); -- 手机号场景可直接设置只显示前3位和后4位 ALTER TABLE user MODIFY COLUMN phone VARCHAR(11) MASKED WITH (FUNCTION = 'mask_inner(3,4)');
- 给普通用户取消查看掩码字段明文的权限:
REVOKE UNMASK ON 库名.* FROM '普通用户名'@'%';
- 给管理员类用户授予查看明文权限:
GRANT UNMASK ON 库名.* TO '管理员用户名'@'%';
方案2:自行实现掩码逻辑
如果你使用的RDS版本低于原生掩码支持的最低版本,可以在业务代码层面或者通过数据库视图实现掩码逻辑:
- 视图实现示例:
CREATE VIEW user_masked AS SELECT id, CONCAT(LEFT(phone,3),'****',RIGHT(phone,4)) AS phone, CONCAT(LEFT(id_card,6),'********',RIGHT(id_card,4)) AS id_card FROM user;
普通查询时直接访问视图即可获取掩码后的数据。
内容的提问来源于stack exchange,提问作者Amit Verma
相关产品推荐
相关产品推荐

