MySQL如何实现多租户数据库权限隔离_利用不同的Database实现隔离

张开发
2026/4/19 15:26:51 15 分钟阅读

分享文章

MySQL如何实现多租户数据库权限隔离_利用不同的Database实现隔离
能MySQL通过GRANT语句将权限精确限制在指定database如tenant_001.禁用ON .*和WITH GRANT OPTION并配合应用层校验database参数与账号权限匹配可实现可靠租户隔离。MySQL多租户用多个Database隔离权限能真正隔开吗能但前提是权限粒度控制到database级别并且不给跨库操作权限。MySQL本身没有“租户”概念靠GRANT语句限制用户只能访问指定database这是最常用也最可靠的隔离方式。常见错误是只创建了不同database却给用户分配了ALL PRIVILEGES ON *.*或USAGE以外的全局权限——这样租户A执行USE tenant_b_db或直接SELECT * FROM tenant_b_db.users就能越权访问。必须用GRANT ... ON tenant_a_db.* TO user_a%而不是ON *.*避免使用WITH GRANT OPTION否则租户可自行授权给他人建库时统一加前缀如tenant_123_users方便后续用LIKE批量管理权限如何安全创建租户专用Database和用户关键不是“建库建用户”而是建完立刻绑定权限、禁用跨库能力。MySQL不会自动阻止用户连接后切换数据库全靠GRANT语句显式限定作用域。示例流程CREATE DATABASE tenant_001;CREATE USER tenant_001_app% IDENTIFIED BY strong-pass-2024;GRANT SELECT, INSERT, UPDATE, DELETE ON tenant_001.* TO tenant_001_app%;FLUSH PRIVILEGES;不要省略FLUSH PRIVILEGES尤其在直接操作mysql.user表后用户host尽量写具体IP或子网如tenant_001_app10.20.30.%不用%避免用root或共享DBA账号执行租户DDL应由自动化脚本或专用权限初始化服务完成为什么SHOW DATABASES还能看到其他租户库这是MySQL默认行为只要用户有任意库权限SHOW DATABASES就会列出所有库名除非开启show_database_privilege限制但该变量5.7已移除。这不是权限泄漏只是元信息可见。 Tellers AI Tellers是一款自动视频编辑工具可以将文本、文章或故事转换为视频。

更多文章