📜  skip-grant-tables (1)

📅  最后修改于: 2023-12-03 14:47:28.306000             🧑  作者: Mango

介绍 MySQL 的 'skip-grant-tables' 选项

在 MySQL 中,'skip-grant-tables' 是一种选项,它可以让管理员在无需授权的情况下登录 MySQL 服务器。此选项通常用于紧急情况下需要恢复 MySQL 登录凭据的场景。但是应该注意,在此选项启用的时候,所有用户都可以访问数据库,这可能会产生安全隐患。

如何启用 'skip-grant-tables' 选项

可以通过以下通知来启用 'skip-grant-tables' 选项:

  1. 停止 MySQL 服务
sudo service mysql stop
  1. 启动 MySQL 并跳过授权表
sudo mysqld_safe --skip-grant-tables &

此时 MySQL 服务器仍然在后台运行。遗憾的是,直接登录 MySQL 实例将无法使用此选项。我们需要使用一个新的客户端来连接 MySQL,例如:

mysql -u root
如何使用 'skip-grant-tables' 选项

启用 'skip-grant-tables' 选项后,管理员可以无需提供凭据直接登录 MySQL 服务器。此时,管理员可以更改 MySQL 用户的密码:

UPDATE mysql.user SET authentication_string=PASSWORD('new_password') WHERE User='root';
FLUSH PRIVILEGES;

上述命令将把 root 用户的密码更改为 'new_password'。管理员也可以创建新用户并授权:

CREATE USER 'new_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
GRANT ALL PRIVILEGES ON *.* TO 'new_user'@'localhost';
FLUSH PRIVILEGES;

这些更改将在管理员关闭 MySQL 服务器、重新启动时生效。

启用 'skip-grant-tables' 的风险

如果管理员在 'skip-grant-tables' 启用的情况下继续使用 MySQL 服务器,并在此期间创建了新用户或更改了密码,则可能会留下安全隐患。如果攻击者能够访问数据库,他们可以轻松地通过 'skip-grant-tables' 选项获取管理员凭据。因此,确保在使用完 'skip-grant-tables' 选项后,立即重置 root 用户的密码、删除不必要的用户并重新启动 MySQL 服务器是至关重要的。

结论

'skip-grant-tables' 是一种通常用于紧急情况下需要恢复 MySQL 登录凭据的选项。在使用此选项之前,您应该充分理解其可能存在的风险并采取适当的措施来保护您的 MySQL 实例。对于开发者来说,要使用此选项,您需要确保了解如何使用相应的命令,以及在使用完毕后及时重置密码和删除非必要的用户。