如何让MySQL授予机器的root用户权限?

如何让MySQL授予机器的root用户权限?

我正在尝试运行mysqlcheck。但运行失败,错误信息如下:

$ sudo su -
# mysqlcheck --auto-repair --all-databases
mysqlcheck: Got error: 1045: Access denied for user 'root'@'localhost' (using password: NO) when trying to connect

其他问题和答案都说要修改或重置 MySQL 密码。我真的不想这么做,因为我不知道会有什么影响。如果有任何脚本使用它,那么我会破解它们。至少,我必须与另外两个 [兼职] 系统管理员共享它,所以这大多是一件麻烦事。

我希望 MySQL 能够识别机器的根用户 (uid 0),并授予其根用户的所有权限。

我在 CentOS 7.2 上工作。如何让 MySQL 授予 root 用户权限?


以下是一些相关问题。它们都与修改密码有关。

答案1

在 MySQL 5.5+ 中,你可以使用身份验证套接字身份验证插件:

CREATE USER 'root'@'localhost' IDENTIFIED WITH auth_socket;

MariaDB 5.2.0+ 具有类似的unix_socket插件 – 据我所知,它默认是活动的:

INSTALL PLUGIN unix_socket SONAME 'auth_socket';
CREATE USER root IDENTIFIED VIA unix_socket;

类似地,PostgreSQL 具有“本地”身份验证方法pg_hba.conf并默认启用它。

在 Unix 上,一般机制通常称为“皮尔克里”,如SO_PEERCRED。 (Windows 等效项通常称为“Windows 本机身份验证”。)

答案2

根据你所说的内容,我将假设你的 MySQL 用户'root'@'localhost'有密码,因为你提到与其他人共享。因此,我还假设你仍然知道该密码。

现在让我们看看错误信息是什么:

Access denied for user 'root'@'localhost' (using password: NO)

所以我在这里看到的是,你试图在不提供密码的情况下连接到 MySQL,而 mysql-user 有密码。显然这是行不通的。

我敢打赌它mysqlcheck --auto-repair --all-databases -p一定能用。它会要求输入密码,然后您就可以开始了。


尽管如此,我强烈建议不要将 MySQL-root 帐户用于除管理 MySQl 服务器之外的其他用途(因为您提到过If there are any scripts using it),只需为该脚本创建另一个具有适当权限的 MySQL 用户即可。如果您真的需要重置 root 密码,告诉另外两个同事应该不是什么大问题,对吧?如果是,我会评估贵公司的沟通方式……

相关内容