cod*_*ope 261 mysql permissions
我刚刚安装了 Ubuntu 16.04 LTS 和软件包php
,mariadb
以及nginx
. 我运行mysql_secure_installation
并更改了root密码。
现在,当我以mysql
普通用户帐户身份登录 Ubuntu时尝试使用 root 帐户登录时,访问被拒绝。
当我使用 登录时sudo mysql
,mysql 甚至不问我密码。如果我运行,mysql_secure_installtion
我会看到旧设置从未永久设置。
我究竟做错了什么?
小智 472
我最近将我的 Ubuntu 15.04 升级到 16.04,这对我有用:
首先,在sudo mysql中连接
sudo mysql -u root
Run Code Online (Sandbox Code Playgroud)检查您的数据库中存在的帐户
SELECT User,Host FROM mysql.user;
+------------------+-----------+
| User | Host |
+------------------+-----------+
| admin | localhost |
| debian-sys-maint | localhost |
| magento_user | localhost |
| mysql.sys | localhost |
| root | localhost |
Run Code Online (Sandbox Code Playgroud)删除当前 root@localhost 帐户
mysql> DROP USER 'root'@'localhost';
Query OK, 0 rows affected (0,00 sec)
Run Code Online (Sandbox Code Playgroud)重新创建您的用户
mysql> CREATE USER 'root'@'%' IDENTIFIED BY '';
Query OK, 0 rows affected (0,00 sec)
Run Code Online (Sandbox Code Playgroud)授予您的用户权限(不要忘记刷新权限)
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)
Run Code Online (Sandbox Code Playgroud)退出 MySQL 并尝试在没有 sudo 的情况下重新连接。
我希望这会帮助某人:)
Tod*_*dor 171
如果您安装 5.7 并且不向
root
用户提供密码,它将使用该auth_socket
插件。该插件不在乎,也不需要密码。它只是检查用户是否使用 UNIX 套接字进行连接,然后比较用户名。
取自在 MySQL 5.7 中使用“插件:auth_socket”更改用户密码
所以为了改plugin
回mysql_native_password
:
使用 sudo 登录:
sudo mysql -u root
Run Code Online (Sandbox Code Playgroud)plugin
使用单个命令更改并设置密码:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';
Run Code Online (Sandbox Code Playgroud)当然你也可以用上面的命令设置一个空密码。
只是为了记录,(和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;
Run Code Online (Sandbox Code Playgroud)
Gaz*_*zer 30
简而言之,在 MariaDB 上
UPDATE mysql.user SET plugin = 'mysql_native_password',
Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
Run Code Online (Sandbox Code Playgroud)
在那里你用你想要的密码替换 NEWPASSWORD,以及其他所有内容。
这里的问题是,当安装/更新 MariaDB 或 MySQL 时(尤其是在某些时候 root 没有设置密码)然后在用户表中密码实际上是空的(或被忽略),并且登录取决于相应的系统用户给 MySQL 用户。您可以通过切换到系统 root 来测试如下,然后键入:
mysql -uroot -p
Run Code Online (Sandbox Code Playgroud)
然后不输入密码或输入错误的密码。您可能会被允许进入。(您甚至可以从 unix root 登录,# mysql
因为密码无关且用户已定义)。
那么发生了什么?好吧,如果您以 root 身份登录并执行以下操作:
select User,host,plugin from mysql.user;
+----------------+-----------+-----------------------+
| User | host | plugin |
+----------------+-----------+-----------------------+
| root | localhost | auth_socket |
+----------------+-----------+-----------------------+
Run Code Online (Sandbox Code Playgroud)
你会注意到auth_socket
(可以unix_socket
在 MariaDB 上阅读)。这些套接字忽略密码并允许相应的 Unix 用户在没有密码检查的情况下进入。这就是为什么您可以使用root登录但不能使用其他用户登录的原因。
所以解决方案是更新用户不使用auth_socket/unix_socket
并正确设置密码。
在 2017 年的 Ubuntu 版本 16 上的 MariaDB(<10.2,请参阅下面的评论)上,这应该就足够了。NEWPASSWORD 是您的密码。mysql_native_password
你逐字输入。
UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
Run Code Online (Sandbox Code Playgroud)
(可能将插件设置为空会起作用。YMMV。我没有尝试过。所以这是一种替代方法。)
UPDATE mysql.user SET plugin = '', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
Run Code Online (Sandbox Code Playgroud)
除此以外:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASSWORD';
Run Code Online (Sandbox Code Playgroud)
然后
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)
作为记录,涉及删除用户并使用 '%' 重新创建它的解决方案让我完全被锁定在数据库之外,并且可能导致其他问题,除非您得到grant
完全正确的语句 - 更容易简单地更新您已经拥有的根。
根据我的经验,这个问题只发生在 root 用户身上,因为其他用户将被手动添加,而不是初始安装/更新的一部分。
Gay*_*tti 16
默认情况下,root
用户设置为通过auth_socket
密码而不是密码进行身份验证。
为了使用密码身份验证,请执行以下操作:
登录到 MySQL 根 shell:
sudo mysql
Run Code Online (Sandbox Code Playgroud)检查为不同用户启用的身份验证方法(可选)
SELECT * FROM mysql.user;
Run Code Online (Sandbox Code Playgroud)请root
用密码进行身份验证:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password_here';
Run Code Online (Sandbox Code Playgroud)刷新权限以使更改生效;
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)退出并使用您的密码进行身份验证
exit
mysql -u root -p
Run Code Online (Sandbox Code Playgroud)小智 3
尝试创建新的 mysql 帐户,对我来说它已经起作用了(mysql 5.7.12):
以 sudo 身份登录:
sudo mysql -uroot
Run Code Online (Sandbox Code Playgroud)创建新用户并授予他权限(无密码):
CREATE USER 'admin'@'localhost' IDENTIFIED BY '';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';
Run Code Online (Sandbox Code Playgroud)以新用户身份登录:
mysql -uadmin
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
331870 次 |
最近记录: |