我正在使用 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 包装器
答案1
MySQL 5.7 改变了安全模型:现在 MySQLroot
登录需要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 正在连接到本地主机,那么这就足够了。
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>'
答案2
如果 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/
答案3
当我将 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
现在如果你尝试localhost/phpmyadmin
使用以下方式连接到 phpmyadmin()
username: root
password: pass
您将能够创建数据库。
答案4
为了完整起见,我找到了使用 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;
问候