ไม่สามารถป้อน phpmyadmin ในฐานะ root (MySQL 5.7)


66

ฉันใช้ Ubuntu desktop 16.04 (อัปเกรดจาก 15.10)

ผมได้ติดตั้ง phpMyAdmin apt-get install phpmyadminจากโดย มันใช้งานได้ถ้าฉันไปถึงlocalhost/phpmyadminแต่ฉันไม่สามารถลงชื่อเข้าใช้ได้ในฐานะรูท

ฉันค้นหามันมาก ฉันพบแหล่งที่มาหลายแห่งที่พวกเขาแนะนำให้แก้ไข/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 wrapper


MySQL รุ่นไหน
Rael Gugelmin Cunha

อัปเดตคำถามแล้ว
Mostafa Ahangarha

THE SIMPLE WAYค้นหาเข้าสู่ระบบและคำสั่งใน /etc/mysql/debian.cnf - Ubuntu 16.04
cl-r

คำตอบ:


127

MySQL 5.7 การเปลี่ยนแปลงรูปแบบการรักษาความปลอดภัย: ตอนนี้ MySQL เข้าสู่ระบบต้องใช้rootsudo

นั่นคือ 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 ของคุณเชื่อมต่อกับ localhost นี่น่าจะเพียงพอ

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 เก็บสิ่งต่าง ๆ หลังจากการอัพเกรด ใช้รูทใน workbench ของฉันอย่างมีความสุขและตอนนี้ดูเหมือนว่าทางออกเดียวคือ "sudo mysql" บนบรรทัดคำสั่งสร้างผู้ใช้ใหม่มอบสิทธิ์แบบเดียวกันทั้งหมดและใช้ใน Workbench โง่.
Andris

3
@MostafaAhangarha หลังจากการตรวจสอบฉันพบว่าอนุญาตให้rootใช้รหัสผ่านเปล่า แต่ผู้ใช้ต้องการการsudoใช้งานบน 5.7 เสมอ ดังนั้นฉันได้อัปเดตคำตอบเพื่อเป็นแนวทางในการสร้างผู้ใช้ใหม่ด้วยสิทธิ์ทั้งหมด
Rael Gugelmin Cunha

3
@Andris สิ่งนี้จะบังคับให้คนใช้ MySQL ในวิธีที่ปลอดภัยยิ่งขึ้น ไม่ควรปล่อยให้ผู้ใช้รูทบนฐานข้อมูลของคุณเข้าสู่ระบบโดยไม่ต้องใช้รหัสผ่าน มันอาจใช้ได้กับเครื่องพัฒนาท้องถิ่น แต่บนเซิร์ฟเวอร์มันอันตรายมาก
ด่าน

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 และ unistalling mysql หรือไม่? ถ้าใช่ข้อมูลของคุณอาจมีประโยชน์ (อาจเป็นเพราะคุณแนะนำให้ลบ mysql ซึ่งเป็นฐานข้อมูลที่ฉันใช้และฉันจะใช้) ถ้าไม่เช่นนั้นก็ไม่มีประเด็นที่จะให้มันเป็นบริบท หากฉันผิดให้ฉันแก้ไขให้ถูกต้อง
Mostafa Ahangarha

2
ฉันติดตามการตั้งค่าใหม่เท่านั้นและตอนนี้ก็ใช้งานได้
cwhisperer

เป็นความคิดที่ดีหรือไม่ที่ไม่มีรหัสผ่านสำหรับบัญชีรูท?
kurdtpage

6

ใน Ubuntu 16.04 สำหรับ 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 |
+------------------+-----------+-----------------------+

ตรวจสอบว่ารูทมีปลั๊กอิน auth_socket หรือไม่จากนั้นเรียกใช้คำสั่งด้านล่าง:

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

มันจะทำงานจนกว่าจะมีการaptอัพเดทMySQL ครั้งต่อไป นั่นคือคุณจะต้องใช้สิ่งนี้หลังจากการอัพเดท MySQL ทุกครั้งบน Ubuntu
Rael Gugelmin Cunha

6

หาก 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 เวอร์ชัน 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
ยินดีต้อนรับสู่ถาม Ubuntu! ถาม Ubuntu สำหรับ Ubuntu เท่านั้นโปรดอย่าโพสต์คำตอบเกี่ยวกับ Raspbian (ตาม Debian)
fosslinux

2
@ubashu โซลูชันนี้ไม่เฉพาะ Raspbian แต่เฉพาะ MariaDB
โธมัสวอร์ด

ขอบคุณ! ยังไม่มีตัวเลือกในการสร้างฐานข้อมูลใหม่
danger89

2

ฉันมีปัญหาเดียวกันฉันได้ทำตามคำแนะนำส่วนใหญ่แล้วและมันก็ไม่ได้ผลสำหรับฉัน! ปัญหาของฉันเหมือนกันเมื่อฉันเปิดhttp: // localhost / phpmyadminในเบราว์เซอร์ของฉันเพื่อขอรายละเอียดการเข้าสู่ระบบ

ฉันใช้รูทเป็นผู้ใช้และรหัสผ่านที่ฉันรู้นั้นถูกต้อง และฉันได้รับ

# 1698 - การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้ 'root' @ 'localhost'

สิ่งที่ต้องทำก็คือใช้phpmyadminในฐานะผู้ใช้ไม่ใช่rootด้วยรหัสผ่านที่เป็นที่รู้จัก


3
คุณหมายถึงชื่อผู้ใช้ควรเป็น "phpmyadmin"?
Mostafa Ahangarha

1
ใช่มันใช้งานได้สำหรับฉัน
plutesci

และสำหรับฉันที่ติดตามการสอนรหัสผ่านคือ "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 เท่านั้นที่จะสามารถเข้าถึงได้อย่างเต็มที่


-2

ถ้าคุณติดตั้ง MySQL แยกให้หยุดด้วยคำสั่งนี้ด้านล่าง sudo / opt / lampp / lampp stop service mysql หยุด sudo / opt / lampp / lampp start

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.