问题描述
我正在使用 Ubuntu 桌面 16.04(从 15.10 升级)。
我已经从 apt-get install phpmyadmin
安装了 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,适用于使用 EditLine 包装器的 Linux (x86_64)
最佳方法
MySQL 5.7 更改了安全模型:现在 MySQL root
登录需要 sudo
。
即,phpMyAdmin 将无法使用 root
凭据。
最简单、最安全和永久的解决方案将是创建一个新用户并授予所需的权限。
1.连接mysql
sudo mysql --user=root mysql
2.创建一个真实的密码
在以下步骤中,我将使用 <please_replace_this>
作为示例密码。请用您的密码替换它!不要使用 <please_replace_this>
作为密码!
3.为phpMyAdmin创建一个用户
运行以下命令(将 <please_replace_this>
替换为所需的密码):
CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY '<please_replace_this>';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
如果您的 phpMyAdmin 连接到 localhost,这应该足够了。
4. 可选且不安全:允许远程连接
请记住:允许远程用户拥有所有权限是一个安全问题,在大多数情况下这不是必需的。
考虑到这一点,如果您希望此用户在远程连接期间拥有相同的权限,请另外运行(将 <please_replace_this>
替换为步骤 #2 中使用的密码):
CREATE USER 'phpmyadmin'@'%' IDENTIFIED BY '<please_replace_this>';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
5.更新phpMyAdmin
使用 sudo
编辑 /etc/dbconfig-common/phpmyadmin.conf
文件,更新以下部分中的用户/密码值(将 <please_replace_this>
替换为步骤 #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='<please_replace_this>'
次佳方法
如果 phpymadmin 无法连接,可能是因为身份验证机制设置为 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/
第三种方法
将 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
您将能够创建数据库。
第四种方法
在 Ubuntu 16.04 for Mysql 5.7 中检查下表信息并执行必要的设置:
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;
第五种方法
为了完整起见,我找到了解决我在使用 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;
问候