Không thể nhập phpmyadmin với quyền root (MySQL 5.7)


66

Tôi đang sử dụng máy tính để bàn Ubuntu 16.04 (được nâng cấp từ 15.10).

Tôi đã cài đặt phpmyadmin từ apt-get install phpmyadmin. Nó hoạt động nếu tôi đi đến localhost/phpmyadminnhưng tôi không thể đăng nhập vào nó với quyền root.

Tôi đã tìm kiếm rất nhiều cho nó. Tôi đã tìm thấy nhiều nguồn trong đó họ đề nghị thay đổi /etc/phpmyadmin/config.inc.phpvà thay thế người dùng và mật khẩu bằng 'root' và '' (trống cho mật khẩu). Nhưng tôi config.inc.phpkhác với họ. Ví dụ trong tệp của tôi, không có dòng nào cho người dùng và mật khẩu và có vẻ như nó tự động lấy nó từ một tệp khác /etc/phpmyadmin/config-db.php. Mặc dù vậy, tôi đã thay đổi người dùng và mật khẩu trong tệp đó, nhưng bây giờ tôi gặp lỗi này:

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

Tôi nên làm gì?


Phiên bản Phpmyadmin: 4.5.4.1deb2ubfox1
mysql Ver 14,14 Phân phối 5.7.12, dành cho Linux (x86_64) bằng trình bao bọc EditLine


Phiên bản MySQL nào?
Rael Gugelmin Cunha

Câu hỏi được cập nhật
Mostafa Ahangarha

CÁCH ĐƠN GIẢN tìm kiếm thông tin đăng nhập và từ khóa trong /etc/mysql/debian.cnf - Ubuntu 16.04
cl-r

Câu trả lời:


127

MySQL 5.7 đã thay đổi mô hình bảo mật: bây giờ rootđăng nhập MySQL yêu cầu a sudo.

Tức là, phpMyAdmin sẽ không thể sử dụng rootthông tin đăng nhập.

Giải pháp đơn giản, an toàn và lâu dài nhất sẽ là tạo một người dùng mới và cấp các đặc quyền cần thiết.

1. Kết nối với mysql

sudo mysql --user=root mysql

2. Tạo một mật khẩu thật

Trong các bước dưới đây tôi sẽ sử dụng some_passlàm mật khẩu mẫu. XIN VUI LÒNG, THAY THẾ NÓ B BYNG MẬT KHẨU CỦA BẠN! KHÔNG SỬ DỤNG SOME_PASSNHƯ MẬT KHẨU!

3. Tạo người dùng cho phpMyAdmin

Chạy các lệnh sau (thay thế some_passbằng mật khẩu mong muốn):

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

Nếu phpMyAdmin của bạn đang kết nối với localhost, điều này là đủ.

4. Tùy chọn và không an toàn: cho phép kết nối từ xa

Hãy nhớ rằng : cho phép người dùng từ xa có tất cả các đặc quyền là mối quan tâm bảo mật và điều này không bắt buộc trong hầu hết các trường hợp.

Với suy nghĩ này, nếu bạn muốn người dùng này có cùng đặc quyền trong các kết nối từ xa, hãy chạy thêm (thay thế some_passbằng mật khẩu được sử dụng trong Bước # 2):

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

5. Cập nhật phpMyAdmin

Sử dụng sudo, chỉnh sửa /etc/dbconfig-common/phpmyadmin.conftệp cập nhật giá trị người dùng / mật khẩu trong các phần sau (thay thế some_passbằng mật khẩu được sử dụng trong Bước # 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
Tôi sẽ điều tra. Trong khi đó, bạn có thể thêm một người dùng mới và cấp tất cả các quyền và sau đó thêm nó vào tệp cấu hình phpmyadmin.
Rael Gugelmin Cunha

9
Phải yêu thích rằng MySQL tiếp tục phá vỡ mọi thứ sau khi nâng cấp. Rất vui khi sử dụng root trong bàn làm việc của tôi và bây giờ có vẻ như giải pháp duy nhất là "sudo mysql" trên dòng lệnh, tạo người dùng mới, cấp tất cả các đặc quyền tương tự và sử dụng nó trong Workbench. Ngốc nghếch.
Andris

3
@MostafaAhangarha Sau khi điều tra, tôi thấy rằng mật khẩu trống được cho phép, nhưng rootngười dùng luôn yêu cầu sudosử dụng vào ngày 5.7. Vì vậy, tôi đã cập nhật câu trả lời để hướng dẫn tạo người dùng mới với tất cả các đặc quyền.
Rael Gugelmin Cunha

3
@Andris Điều này sẽ buộc mọi người sử dụng MySQL theo cách an toàn hơn. Không bao giờ nên cho phép người dùng root trên cơ sở dữ liệu của bạn đăng nhập mà không cần mật khẩu. Nó có thể tốt trên một máy phát triển cục bộ, nhưng trên một máy chủ thì nó rất nguy hiểm.
Dan

2
@Dan - đó là sự kìm kẹp lớn nhất của tôi - nó đã phá vỡ môi trường phát triển địa phương của tôi sau khi nâng cấp lên Ubuntu 16.04 mà không có bất kỳ cảnh báo nào. Tôi không bận tâm những thứ như thế này là mặc định cho các cài đặt mới nhưng ít nhất có thể hỏi trước khi cài đặt bản cập nhật.
Andris

10

Tôi đã gặp vấn đề tương tự khi sử dụng mariaDB với phpmyadmin (Ubuntu 16.04LTS).

Điều kiện tiên quyết:

1) Cài đặt 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

Nếu bạn muốn gỡ cài đặt 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) Cài đặt 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) Trong apache2, tạo một liên kết tượng trưng đến phpmyadmin

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

Ok, bây giờ, nếu bạn làm theo hướng dẫn của Rael, bạn sẽ có thể đăng nhập phpmyadmin, nhưng, ít nhất là đối với tôi, tôi không thể tạo cơ sở dữ liệu mới, vì một thông báo màu đỏ xuất hiện: No privileges(hoặc một số tin nhắn tương tự)

Việc khắc phục là bằng cách cấu hình lại phpmyadmin và bằng cách trả lời một số câu hỏi tương tác.

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

Bây giờ nếu bạn thử kết nối vào phpmyadmin ( localhost/phpmyadmin) bằng cách sử dụng

username: root
password: pass

bạn sẽ có thể tạo cơ sở dữ liệu.


1
Cảm ơn bạn vì câu trả lời. Nhưng tốt hơn hết là chỉ chia sẻ phần cuối thay vì toàn bộ? Tôi nghĩ phần còn lại không hữu ích ở đây?
Mostafa Ahangarha 20/03/2017

@MostafaAhangarha Có thể bài viết hơi dài, nhưng tôi luôn muốn biết về bối cảnh trong đó một câu trả lời được đưa ra.
Dan Costinel

Việc chạy sudo dpkg-reconfigure phpmyadmin có bất kỳ kết nối nào để cài đặt mariadb và mysql không? Nếu có, thì thông tin của bạn có thể hữu ích (có thể là do bạn đang đề xuất loại bỏ mysql là DB tôi đang sử dụng và tôi sẽ sử dụng). Nếu không, thì không có điểm nào cho nó làm bối cảnh. Nếu tôi sai, hãy làm cho tôi đúng.
Mostafa Ahangarha

2
Tôi chỉ theo cấu hình lại và bây giờ nó hoạt động.
cwhisperer

Đó có phải là một ý tưởng tốt để không có mật khẩu cho tài khoản root?
Kurdtpage

6

Trong Ubuntu 16.04 cho Mysql 5.7, hãy kiểm tra thông tin bảng bên dưới và thực hiện các cài đặt cần thiết:

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 |
+------------------+-----------+-----------------------+

Kiểm tra xem root có plugin auth_socket hay không, sau đó chạy bên dưới lệnh:

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

Nó sẽ hoạt động cho đến khi aptcập nhật MySQL tiếp theo . Tức là, bạn sẽ cần phải áp dụng điều này sau mỗi lần cập nhật MySQL trên Ubuntu.
Rael Gugelmin Cunha

6

Nếu phpymadmin không thể kết nối thì có thể là do cơ chế xác thực được đặt thành auth_socket. Bạn có thể thay đổi nó để sử dụng một mật khẩu thông thường như thế này:

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

Tôi đã phải vật lộn với điều này ngay bây giờ trên một bản cài đặt sạch Ubuntu 18.04 và đây là thứ đã làm cho nó hoạt động. Có một bài viết hay ở đây giải thích thêm:

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


3

Để hoàn thiện, tôi đã tìm ra giải pháp cho sự cố của mình khi sử dụng MariadB phiên bản 10.1.23. Cú pháp sử dụng để thiết lập người dùng mới tương tự như cú pháp được báo cáo trong bài viết ở trên từ @Rael Gugelmin Cunha, tôi đặt ở đây giải pháp của mình để tham khảo cho những người khác gặp phải rắc rối tương tự:

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;

Trân trọng


1
Chào mừng bạn đến hỏi Ubuntu! Hỏi Ubuntu chỉ dành cho Ubuntu, vui lòng không đăng câu trả lời về Raspbian (dựa trên Debian).
fosslinux

2
@ubashu Giải pháp này không dành riêng cho Raspbian, đó là MariaDB cụ thể.
Thomas Ward

Cảm ơn! Vẫn không có tùy chọn để tạo cơ sở dữ liệu mới mặc dù.
nguy hiểm89

2

Tôi có cùng một vấn đề, tôi đã làm theo hầu hết các lời khuyên và không ai trong số đó làm việc cho tôi! Vấn đề của tôi là như vậy khi tôi mở http: // localhost / phpmyadmin trong trình duyệt của mình, nó đã yêu cầu đăng nhập chi tiết.

Tôi đã sử dụng root như người dùng và mật khẩu tôi biết là chính xác. Và tôi đã nhận được

# 1698 - Truy cập bị từ chối cho người dùng 'root' @ 'localhost'

Tất cả chỉ cần sử dụng phpmyadminnhư người dùng, không phải rootvới mật khẩu đã biết và nó cho tôi vào.


3
Ý bạn là tên người dùng phải là "phpmyadmin"?
Mostafa Ahangarha

1
Có, nó hoạt động với tôi
plutesci

Và đối với tôi theo hướng dẫn, mật khẩu là "some_pass" haha. Cảm ơn!
Marcelo Ágil

@ MarceloÁgil Tôi đã đặt một vài cảnh báo trong câu trả lời trên của mình để yêu cầu mọi người thay thế some_passbằng mật khẩu thật!
Rael Gugelmin Cunha

1

Nhắc đến Rael Cunha:

Có giải pháp của anh ấy hoạt động, và tôi đã thử những người khác. Tuy nhiên, việc đề cập đến một người dùng có mật khẩu bị lộ trên một tệp cấu hình /etc/dbconfig-common/phpmyadmin.conftrông giống như một lỗ hổng bảo mật cho một hành động trên toàn hệ thống.

Vì vậy, tôi muốn đề xuất những gì MariaDB 10.1.xliên quan (some_user và some_pass sẽ là bất cứ điều gì bạn có thể nghĩ ra):

# 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;

và để lại thiết lập phpadmin (4).

Đăng nhập vào phpmyadmin bằng thông tin đăng nhập của riêng bạn sau đó

Trên các thiết lập của riêng tôi, tôi thay thế '%' bằng 'localhost' ở trên cho mục đích bảo mật, nhưng nếu bạn đóng cổng 3306 trên máy chủ thì điều đó không nhất thiết gây ra rủi ro bảo mật cho bạn.


0

Chỉ bên dưới mã hoạt động cho Ubuntu 18.04, php 7 ở trên và mysql 5.7

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

Đừng thay thế 'phpmyadmin'. Tạo bất kỳ người dùng nào khác không có đặc quyền đầy đủ như tạo người dùng mới, gán đặc quyền cơ sở dữ liệu cho người dùng đó như thế. Chỉ người dùng phpmyadmin mới có quyền truy cập đầy đủ.


-2

Nếu bạn cài đặt MySQL riêng thì dừng nó bằng lệnh này bên dưới sudo / opt / lampp / lampp dừng dịch vụ mysql dừng sudo / opt / lampp / lampp bắt đầu

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.