无法以root身份输入phpmyadmin(MySQL 5.7)


66

我正在使用Ubuntu桌面16.04(从15.10升级)。

我已经从安装了phpmyadmin apt-get install phpmyadmin。如果我转到该站点,则localhost/phpmyadmin无法使用,但无法以root用户身份登录。

我已经搜索了很多。我发现许多资料来源都建议/etc/phpmyadmin/config.inc.php将用户名和密码更改为“ root”和“”(密码为空)。但是我config.inc.php和他们不同。例如,在我的文件中,没有用于输入用户名和密码的行,并且看来它是从另一个文件()中自动获取该行的/etc/phpmyadmin/config-db.php。尽管如此,我还是更改了该文件中的用户名和密码,但是现在出现了此错误:

#1698 - Access denied for user 'root'@'localhost'

我该做什么?


Phpmyadmin版本:4.5.4.1deb2ubuntu1
mysql Ver 14.14 Distrib 5.7.12,适用于Linux(x86_64)使用EditLine包装器


哪个MySQL版本?
Rael Gugelmin Cunha

问题已更新
Mostafa Ahangarha '16

简单的方法搜索登录 pathword /etc/mysql/debian.cnf - Ubuntu的16.04
CL-R

Answers:


127

MySQL 5.7更改了安全模型:现在,MySQL root登录需要输入sudo

即,phpMyAdmin将无法使用root凭据。

最简单,最安全和永久的解决方案是创建新用户并授予所需的特权。

1.连接到mysql

sudo mysql --user=root mysql

2.创建一个真实的密码

在以下步骤中,我将some_pass用作示例密码。请用您的密码代替!不要用作SOME_PASS密码!

3.为phpMyAdmin创建一个用户

运行以下命令(替换some_pass为所需的密码):

CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

如果您的phpMyAdmin连接到本地主机,这应该足够了。

4.可选且不安全:允许远程连接

切记:允许远程用户拥有所有特权是出于安全考虑,在大多数情况下这不是必需的。

考虑到这一点,如果您希望该用户在远程连接期间具有相同的特权,请额外运行(替换some_pass为步骤2中使用的密码):

CREATE USER 'phpmyadmin'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

5.更新phpMyAdmin

使用sudo/etc/dbconfig-common/phpmyadmin.conf在以下部分中编辑文件更新用户/密码值(some_pass由步骤2中使用的密码代替):

# dbc_dbuser: database user
#       the name of the user who we will use to connect to the database.
dbc_dbuser='phpmyadmin'

# dbc_dbpass: database user password
#       the password to use with the above username when connecting
#       to a database, if one is required
dbc_dbpass='some_pass'

2
我会调查 作为与此同时的解决方法,您可以添加一个新用户并授予所有权限,然后将其添加到phpmyadmin配置文件中。
Rael Gugelmin Cunha

9
深爱MySQL在升级后会不断破坏。在我的工作台中愉快地使用了root,现在看来唯一的解决方案是在命令行上“ sudo mysql”,创建一个新用户,授予所有相同的特权并在Workbench中使用它。笨。
Andris

3
@MostafaAhangarha经过调查,我发现允许使用空白密码,但root用户始终要求sudo使用5.7。因此,我更新了答案以指导创建具有所有特权的新用户。
Rael Gugelmin Cunha

3
@Andris这将迫使人们以更安全的方式使用MySQL。无论如何,让数据库中的root用户无需密码即可登录绝对不是一个好主意。在本地开发计算机上可能很好,但是在服务器上则非常危险。
2013年

2
@Dan-这是我最大的烦恼-在没有任何警告的情况下升级到Ubuntu 16.04后,它破坏了我的本地开发环境。我不介意像这样的东西是新安装的默认值,但至少可以在安装更新之前询问一下。
Andris

10

将mariaDB与phpmyadmin(Ubuntu 16.04LTS)结合使用时,我遇到了同样的问题。

先决条件:

1)安装MariaDB

sudo apt-get -y install mariadb-server mariadb-client
sudo mysql_secure_installation (answer to some interactive questions):
    Enter current password for root (enter for none): <enter>
    Set root password: n
    Remove anonymous users: n
    Disallow root login remotely: n
    Remove test database and access to it: n
    Reload privilege tables now: Y

如果要卸载mariaDB

sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-5.5 mysql-client-core-5.5
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean

2)安装phpmyadmin

sudo apt-get -y install phpmyadmin (and answer some interactive questions)
    Configuring phpmyadmin:
        Web server to reconfigure automatically: apache2
        Configure database for phpmyadmin with dbconfig-common: Yes
        MySQL application password for phpmyadmin: <blank>

3)在apache2中,创建到phpmyadmin的符号链接

sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf
sudo a2enconf phpmyadmin.conf
sudo service apache2 restart

好的,现在,如果您遵循Rael的指示,您将能够登录phpmyadmin,但是至少对我来说,由于出现红色消息,我无法创建新数据库:(No privileges或类似消息)

解决方法是通过重新配置phpmyadmin并回答一些交互式问题。

sudo dpkg-reconfigure phpmyadmin
<Ok>
Reinstall database for phpmyadmin: <Yes>
Connection method for MySQL database server for phpmyadmin: TCP/IP
Host name of the MySQL database server for phpmyadmin: localhost
Port number for the MySQL service: 3306
MySQL database name for phpmyadmin: phpmyadmin
<Ok>
MySQL username for phpmyadmin: root
MySQL application password for phpmyadmin: pass  # OR ANY PASSWORD YOU WANT
Password confirmation: pass
Name of the database's administrative user: root
Web server to reconfigure automatically: apache2
An error occurred while installing the database: ignore

现在,如果您尝试使用连接到phpmyadmin(localhost/phpmyadmin

username: root
password: pass

您将能够创建数据库。


1
谢谢您的回答。但是,只分享最后一部分而不是全部,不是更好吗?我认为剩下的没有用了吗?
Mostafa Ahangarha

@MostafaAhangarha也许帖子太长了,但是我总是喜欢知道给出答案的上下文。
Dan Costinel

运行时是否sudo dpkg-reconfigure phpmyadmin 与安装mariadb和轻松安装mysql有任何关系?如果是,那么您的信息可能会很有用(可能是因为您建议删除mysql,这是我正在使用并且将要使用的数据库)。如果没有,那么就没有必要将其作为上下文。如果我错了,请使我正确。
Mostafa Ahangarha

2
我只遵循了重新配置,现在可以使用了。
cwhisperer

根帐户没有密码是个好主意吗?
kurdtpage

6

在适用于Mysql 5.7的Ubuntu 16.04中,检查下表信息并执行必要的设置:

mysql>  SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| User             | Host      | plugin                |
+------------------+-----------+-----------------------+
| root             | localhost | auth_socket           |
| mysql.session    | localhost | mysql_native_password |
| mysql.sys        | localhost | mysql_native_password |
| debian-sys-maint | localhost | mysql_native_password |
| phpmyadmin       | localhost | mysql_native_password |
| root             | %         | mysql_native_password |
+------------------+-----------+-----------------------+

检查root是否具有auth_socket插件,然后运行以下命令:

mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;

它会一直工作到下一个MySQL apt更新为止。即,在Ubuntu上的每个MySQL更新之后,您都需要应用此功能。
Rael Gugelmin Cunha,

6

如果phpymadmin无法连接,可能是由于auth机制设置为auth_socket。您可以将其更改为使用常规密码,如下所示:

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

刚刚在全新安装的Ubuntu 18.04上,我为此而苦苦挣扎,这就是使其工作的原因。这里有一篇不错的文章解释了更多:

https://www.percona.com/blog/2016/03/16/change-user-password-in-mysql-5-7-with-plugin-auth_socket/


3

为了完整起见,我找到了使用MariadB版本10.1.23的解决方案。用于设置新用户的语法类似于@Rael Gugelmin Cunha在上面的帖子中所报告的一种语法,我在这里提出了自己的解决方案,以供其他面临相同麻烦的人参考:

root@raspberrypi:# sudo mysql --user=root mysql
use mysql;
CREATE USER 'phpmyadmin'@'%' IDENTIFIED BY 'some_password';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

问候


1
欢迎来到Ask Ubuntu!Ask Ubuntu仅适用于Ubuntu,请不要发布有关Raspbian(基于Debian)的答案。
fosslinux

2
@ubashu此解决方案不是特定于Raspbian的,而是特定于MariaDB的。
托马斯·沃德

谢谢!仍然没有选择创建新数据库的选项。
危险89年

2

我遇到了同样的问题,我遵循了大多数建议,但没有一个对我有用!当我在浏览器中打开http:// localhost / phpmyadmin时,我的问题是相同的,它要求登录详细信息。

我以root用户身份使用,知道的密码正确。我得到了

#1698-用户'root'@'localhost'的访问被拒绝

它所要做的就是使用phpmyadmin用户名,而不是root使用已知密码,它让我进入了。


3
您是说用户名应该是“ phpmyadmin”?
Mostafa Ahangarha

1
是的,它对我
有用

对我来说,跟随教程学习的密码是“ some_pass”哈哈。谢谢!
MarceloÁgil

@MarceloÁgil我在上面的答案中已放置了几条警告,要求人们用some_pass真实密码替换!
Rael Gugelmin Cunha

1

提到雷尔·库尼亚(Rael Cunha):

是的,他的解决方案有效,我已经尝试了其他方法。但是,指的是在配置文件(例如,/etc/dbconfig-common/phpmyadmin.conf就像对系统范围操作的安全漏洞一样。

因此,我宁愿建议您MariaDB 10.1.x关注什么(some_user和some_pass将是您可能想到的任何东西):

# mysql -u root
use mysql;
CREATE USER 'some_user'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON \*.\* TO 'some_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

并保持phpadmin安装程序(4)不变。

然后使用您自己的凭据登录phpmyadmin

在我自己的设置中,出于安全目的,我用“ localhost”替换了上面的“%”,但是,如果服务器上关闭了端口3306,则不一定会对您造成安全风险。


0

仅以下代码适用于ubuntu 18.04,以上php 7和mysql 5.7

CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

不要替换“ phpmyadmin”。创建其他任何用户都没有创建新用户那样的完整特权,像这样向该用户分配数据库特权。只有phpmyadmin用户将获得完全访问权限。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.