ubuntu16 mysql第一次登录_无法从Ubuntu 16.04的普通用户帐户以mysql用户root的身份登录...

本文介绍了在Ubuntu 16.04上安装MySQL后,普通用户无法以root身份登录的问题及解决方法。包括删除现有root用户并重新创建,更改root用户认证插件为mysql_native_password,以及授权和刷新权限等步骤。
摘要由CSDN通过智能技术生成

问题描述

我刚刚安装了Ubuntu 16.04 LTS以及软件包php,mariadb和nginx。我运行mysql_secure_installation并更改了root密码。

现在,当我尝试登录到mysql时,使用root帐户登录Ubuntu作为普通用户帐户登录时,我的访问被拒绝。

当我使用sudo mysql登录时,mysql甚至不会问我密码。如果我运行mysql_secure_installtion,我会发现旧设置永远不会永久设置。

我究竟做错了什么?

最佳解决方案

我最近将Ubuntu 15.04升级到16.04,这对我来说很有效:

首先,在sudo mysql中连接

sudo mysql -u root

检查您的数据库中存在的帐户

SELECT User,Host FROM mysql.user;

+------------------+-----------+

| User | Host |

+------------------+-----------+

| admin | localhost |

| debian-sys-maint | localhost |

| magento_user | localhost |

| mysql.sys | localhost |

| root | localhost |

删除当前的root @ localhost帐户

mysql> DROP USER 'root'@'localhost';

Query OK, 0 rows affected (0,00 sec)

重新创建您的用户

mysql> CREATE USER 'root'@'%' IDENTIFIED BY '';

Query OK, 0 rows affected (0,00 sec)

为您的用户授予权限(不要忘记刷新权限)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

Query OK, 0 rows affected (0,00 sec)

mysql> FLUSH PRIVILEGES;

Query OK, 0 rows affected (0,01 sec)

退出MySQL并尝试在没有sudo的情况下重新连接。

我希望这会帮助别人:)

次佳解决方案

If you install 5.7 and don’t provide a password to the root user, it will use the auth_socket plugin. That plugin doesn’t care and doesn’t need a password. It just checks if the user is connecting using a UNIX socket and then compares the username.

所以为了将plugin改回mysql_native_password:

用sudo登录:

sudo mysql -u root

更改plugin并使用单个命令设置密码:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';

当然你也可以使用上面的命令设置一个空密码。

仅供记录(和MariaDB < 10.2用户),还有另一种方法可以在不提供密码的情况下更改plugin(将其保留为空):

update mysql.user set plugin = 'mysql_native_password' where User='root';

// to change the password too (credits goes to Pothi Kalimuthu)

// UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root';

FLUSH PRIVILEGES;

第三种解决方案

这里的问题是,当安装/更新MariaDB或MySQL时(特别是在某些时候root设置为没有密码的情况下),那么在Users表中密码实际上是空的(或被忽略),并且登录取决于系统用户对应给MySQL用户。您可以通过切换到系统根目录来进行如下测试,然后键入:

mysql -uroot -p

然后输入无密码或错误的密码。您可能会被允许进入。(您甚至可以通过简单的# mysql从unix根目录登录,因为密码是不相关的,并且用户被定义)。

那么发生了什么?那么,如果你以root身份登录并执行以下操作:

select User,host,plugin from mysql.user;

+----------------+-----------+-----------------------+

| User | host | plugin |

+----------------+-----------+-----------------------+

| root | localhost | auth_socket |

+----------------+-----------+-----------------------+

你会注意到auth_socket(它可能读MariaDB上的unix_socket)。这些套接字忽略密码,并允许相应的Unix用户无需密码检查。这就是为什么你可以用root登录,而不是用不同的用户登录。

因此,解决方案是更新用户以不使用auth_socket/unix_socket并正确设置密码。

在2017年Ubuntu版本16上的MariaDB(< 10.2)中,这应该就足够了:

UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';

(将插件设置为空也是可行的。YMMV,我没有试过。)

UPDATE mysql.user SET plugin = '', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';

除此以外:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASSWORD';

然后

FLUSH PRIVILEGES;

为了记录,涉及删除用户并使用’%’重新创建的解决方案让我完全被锁定在数据库之外,并且可能导致其他问题,除非您获得grant语句完全正确 – 更容易更新您已拥有的根。

根据我的经验,问题只发生在root用户身上,因为其他用户将手动添加,而不是初始安装/更新的一部分。

参考资料

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值