【发布时间】:2021-05-04 23:34:43
【问题描述】:
我在 Ubuntu 20.04 上安装了一个新的 mysql server 8,我只是想设置 root 密码,这是我尝试安装的应用程序所必需的。我已经做了一个小时了,我发现的每个网站都说同样的话。这就是我正在做的:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'test';
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
然后我为了安全起见重启mysql-server,然后尝试登录:
mysql -u root -p
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
我不知道出了什么问题。我确实看到 root@localhost 的 authentication_string 是空的,这似乎不对。
编辑:
很明显,“更改密码”并不是真正的问题。这里正在发生其他事情。即使使用命令“sudo mysql_secure_installation”设置密码后,我也无法登录。
root@localhost 的“plugin”设置为“auth_socket”。我还不知道这意味着什么,但似乎已经让某个外部进程负责对该用户进行身份验证。
编辑2:
看起来 auth_socket 只是检查您是否以您在 mysql 上尝试登录的用户身份登录 linux。这意味着没有非 root linux 用户可以在 mysql 上以 root 身份登录。所以看来我必须删除这个 auth_socket 插件,然后切换到普通的 mysql 身份验证方法。有人知道在不破坏任何东西的情况下做到这一点的最佳方法吗?删除用户并重新创建它会破坏很多东西吗?
【问题讨论】:
-
"Query OK, 0 rows affected (0.01 sec)" 表示查询不工作,看看idetified by or username是否正确
-
@mahen3d 不正确。如果用户不存在,则会出现
ERROR 1396 (HY000): Operation ALTER USER failed for 'nosuchuser'@'localhost'形式的错误。flush privileges和重新启动不是必需的。你连接到同一台服务器吗?你能看看show create user root@localhost看看它是否被锁定/过期。 -
希望对您有所帮助 - stackoverflow.com/a/42484420/9348637
-
从操作系统的角度来看,您需要作为管理员执行此操作。否则,更改只会持续到您的 MySQL 会话。
-
这是 show create user 给出的内容: CREATE USER 'root'@'localhost' IDENTIFIED WITH 'auth_socket' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT PASSWORD REUSE INTERVAL DEFAULT PASSWORD REQUIRE CURRENT DEFAULT
标签: mysql