11 mysql 覆盖已有视图后权限丢失处理
mysql 修改视图后权限丢失处理¶
背景¶
1、 业务因为某些字段属于加密字段,不能暴露给某些人员使用,并且开发是使用明文存储
2、 使用视图对特殊字段进行加密,并为使用人员开通视图权限,不开通源表权限
3、 有表字段的DDL ,然后视图未更新后发现业务查询权限丢失了
处理过程¶
1、 针对特殊情况创建视图,这里为cmzhu库中的 源表cmzhu创建一个cmzhu_v视图,包含id 字段和secret字段,并对secret` 字段进行加密,实现如下:
# 新建视图
create view `call`.`cmzhu_v` AS SELECT `id`,
`cmzhu`.`hex`(`cmzhu`.`aes_encrypt`(`secret`, '<加密密钥>')) AS `secret`
FROM `cmzhu`
2、如果已有视图情况下,需要为视图添加新字段new_column,请使用SQL SECURITY DEFINER 覆盖( 用于解决背景3 中问题):
# 修改视图
CREATE OR REPLACE SQL SECURITY DEFINER VIEW `call`.`cmzhu_v` AS SELECT `id`,
`cmzhu`.`hex`(`cmzhu`.`aes_encrypt`(`secret`, '<加密密钥>')) AS `secret`,
`new_column`
FROM `cmzhu`
3、 为指定用户cmzhu_read 授权该视图SELECT权限
GRANT SELECT `cmzhu`.`cmzhu_v` TO 'cmzhu_read'@'%'