如何加密MySQL视图源代码以防止他人查看或编辑?
MySQL视图源代码加密方案说明
MySQL没有像MSSQL那样直接通过WITH ENCRYPTION子句加密视图源代码的内置功能,不过可以通过以下几种方式间接保护视图的构建逻辑:
权限控制限制视图定义查询
视图的定义信息存储在information_schema.VIEWS表的VIEW_DEFINITION字段中。你可以通过撤销普通用户对该表的SELECT权限,阻止他们查看视图的构建逻辑:REVOKE SELECT ON information_schema.VIEWS FROM '普通用户名'@'主机地址';注意:拥有SUPER权限的管理员用户仍然可以访问该表,所以这种方式仅对普通用户有效。
用存储过程替代视图封装逻辑
把原本视图的查询逻辑封装到存储过程中,只给用户授予存储过程的EXECUTE权限,而不授予查看存储过程定义的权限。示例:CREATE DEFINER='管理员用户'@'%' PROCEDURE GetEncryptedData() BEGIN -- 这里写原本视图的查询逻辑 SELECT col1, col2 FROM table1 WHERE condition; END;然后给普通用户授权:
GRANT EXECUTE ON PROCEDURE GetEncryptedData TO '普通用户名'@'主机地址';同样,管理员用户仍能查看存储过程定义,但普通用户只能执行无法查看逻辑。
核心逻辑移至应用层
如果视图包含敏感的业务计算逻辑,可以把这部分逻辑放到应用程序中实现,视图仅返回基础的原始数据。这样视图本身的定义就不会暴露核心业务逻辑,安全性更高。
内容的提问来源于stack exchange,提问作者DaniKR
相关产品推荐
相关产品推荐

