MySQL Workbench中的权限设置不生效
️现象这个test账号我只给了两个数据库权限为什么它连接还是能看到其他数据库。下图是这个账号的设置。test账号能看到其他数据库很可能是因为它拥有了某个“全局级别”的权限比如SHOW DATABASES。只要用户有任意一个全局权限MySQL 就会允许他查看服务器上所有数据库的名字这可能会造成一些安全风险。 为什么一个全局权限会导致看到所有数据库在 MySQL 中权限的授予范围是分层级的。其中“全局权限”*.*是所有权限里最高的一级。根据 MySQL 的官方设计只要用户拥有了任何一个全局权限系统在执行SHOW DATABASES命令时就会向其展示服务器上所有数据库的名称。️♂️ 排查问题test 账号拥有哪些权限按照下面的步骤来检查test账号的具体权限应该就能找到是哪个全局权限导致了问题。登录数据库用root或其他有管理权限的账号登录 MySQL。mysql-uroot-p查看用户权限在 MySQL 命令行中执行以下 SQL 命令SHOW GRANTS FORtest%;请注意账号由用户名 (test) 和主机名 (%) 共同组成。分析返回结果重点检查输出中是否包含GRANT ... ON \*.\* TO ...这样的语句。这类语句就代表了全局权限。 解决方案如何限制用户只能看到授权的数据库想解决这个问题核心思路就是移除用户多余的全局权限。1. 方案一移除SHOW DATABASES权限推荐如果你只希望用户看不到其他数据库但无需回收他的其他权限可以只撤销SHOW DATABASES权限。在命令行中执行REVOKE SHOW DATABASES ON *.* FROMtest%;2. 方案二检查并回收不必要的全局权限你也可以选择移除所有不必要的全局权限仅保留数据库级别的授权。操作前请先查询并评估再执行撤销--1. 查询当前权限以评估 SHOW GRANTS FORtest%;--2. 移除不必要的全局权限例如 REVOKE SELECT ON *.* FROMtest%;3. 验证结果执行权限回收后可以让test重新登录并运行SHOW DATABASES;命令检查数据库列表是否已符合预期。 核心总结理解权限层级是关键MySQL 的这种设计是为了兼顾安全性与可用性安全性优先默认行为是“最小权限原则”即用户只能看到自己有权限访问的数据。这有效防止了低权限用户通过SHOW DATABASES来探测服务器上的所有数据库名称降低了信息泄露的风险。全局权限的双刃剑作为最高层级的权限全局权限能极大地方便管理员操作但也会产生“看到所有数据库”的副作用。因此在给普通业务账号授予任何全局权限时都需格外谨慎。