Navicat 博客

在 MySQL 中对用户隐藏数据库 2020 年 7 月 23 日,由 Robert Gravelle 撰写

关于用户权限的格言是,应该为用户分配执行其工作职能所需的最少权限,而不必分配更多权限。这就是 MySQL 提供如此精细的访问控制系统的原因。尽管这不是最容易掌握的系统,但是一旦 DBA 做到了,他或她就会倾向于认为此系统确实非常有效。在今天的文章中,我们将学习如何防止用户在 MySQL 中列出数据库。

使用 mysql.user 表

mysql.user 表包含有关有权访问 MySQL 服务器的用户的信息以及其全局权限。尽管可以直接查询和更新 user 表,但是最好使用 GRANT 和 CREATE USER 添加用户和权限。若要查看 user 表的内容,我们可以使用 DESC 命令:

user_table (37K)

允许用户使用 SHOW_DATABASES 命令获取数据库列表的权限是 Show_db_priv。因此,在新数据库上,我们可以简单地不将用户添加到数据库中以防止用户看到它。否则,你可以发出 SHOW GRANTS 命令来查看用户当前拥有哪些权限:

SHOW GRANTS FOR 'bob_s'@'localhost';

这是Navicat Premium中“bob_s @ localhost”用户的一些示例输出:

show_grants_for_bob_s (74K)

撤销用户权限

上面的输出确认 bob_s 确实具有 SHOW DATABASES 权限。如果现在想删除该权限,可以发出 REVOKE 命令:

REVOKE Show_db_priv
ON sakila
FROM bob_s'@'localhost;

在 Navica t中,我们可以在用户详细信息的“服务器权限”和“权限”选项卡上在服务器和数据库级别设置用户权限。若要访问它们,请点击主按钮栏上的“用户”按钮并选择你感兴趣的用户,然后点击对象工具栏上的“权限管理员”按钮:

privilege_manager (32K)

以下是 bob_s@localhost 的服务器级权限(包括 SHOW DATABASES):

server_level_privileges (14K)

若要撤消 SHOW DATABASES 权限,我们只需取消勾选 SHOW DATABASES 标签旁边的框,然后点击“保存”按钮。

以下是 bob_s@localhost 的 sakila 数据库权限:

privileges_for_sakila_db (33K)

在这里,我们还可以设置数据库特定的权限,例如用于创建视图、显示视图、删除表、执行 INSERT 语句等的权限。我们甚至可以在表和列级别管理权限!

add_privilege_dialog (59K)

总结

在今天的文章中,我们看到了如何通过 MySQL REVOKE 命令以及使用 Navicat 的“服务器权限”和“权限”选项卡来阻止用户在 MySQL 中列出数据库。大家可能会争论两者哪一个比较容易,但我个人认为复选框方法更直观。

若要了解有关在 Navicat 中管理用户的更多信息,请查看“在 Navicat Premium 中管理 MySQL 用户”系列:

如果你对 Navicat for MySQL 感兴趣,可以免费试用 14 天!

Navicat 文章
频道条目
分享
文章归档