การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้ 'root' @ 'localhost' (โดยใช้รหัสผ่าน: ใช่) หลังจากติดตั้งใหม่บน Ubuntu


124

วันนี้ฉันทำการล็อกอินในฐานะรูทใน Ubuntu 14.04.1 LTS ll

แล้วapt-get install mariadb-server(ไม่มี sudo แต่เป็นรูท)

กับmySQL -h localhost -u root --password=<PW>ฉันได้

การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้ 'root' @ 'localhost' (โดยใช้รหัสผ่าน: ใช่)

เมื่อmySQL -u root -pฉันลงชื่อเข้าใช้ฐานข้อมูลและทำ

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '<PW>';
FLUSH ALL PRIVILEGES;

แต่สิ่งนี้ไม่ได้ช่วยอะไร คุณมีความคิดบ้างไหม? ฉันไม่พบคำตอบสำหรับคำถามที่คล้ายกัน


คุณได้ลองรีเซ็ตรหัสผ่านสำหรับรูทแล้วหรือยัง?
Ozgur Bar

คำตอบ:


278

TL; DR:ในการเข้าถึง mysql / mariadb เวอร์ชันที่ใหม่กว่าในฐานะผู้ใช้รูทหลังจากการติดตั้งใหม่คุณต้องอยู่ในรูทเชลล์ (เช่นsudo mysql -u rootหรือmysql -u rootภายในเชลล์ที่เริ่มต้นโดยsu -หรือsudo -iก่อน)


หลังจากทำการอัปเกรดเดียวกันบน Ubuntu ฉันก็มีปัญหาเดียวกัน

สิ่งที่แปลกคือ

sudo /usr/bin/mysql_secure_installation

จะยอมรับรหัสผ่านของฉันและอนุญาตให้ฉันตั้งค่า แต่ฉันไม่สามารถเข้าสู่ระบบrootผ่านmysqlไคลเอนต์ได้

ฉันต้องเริ่ม mariadb ด้วย

sudo mysqld_safe --skip-grant-tables

เพื่อเข้าถึงในฐานะรูทในขณะที่ผู้ใช้รายอื่นทั้งหมดยังสามารถเข้าถึงได้ดี

ดูmysql.userตารางที่ฉันสังเกตเห็นสำหรับรูทpluginคอลัมน์ถูกตั้งค่าเป็นunix_socketในขณะที่ผู้ใช้รายอื่นทั้งหมดตั้งค่าเป็น 'mysql_native_password' ดูหน้านี้อย่างรวดเร็ว: https://mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin/อธิบายว่า Unix Socket เปิดใช้งานการเข้าสู่ระบบโดยจับคู่uidกระบวนการที่เรียกใช้ไคลเอ็นต์กับของผู้ใช้ในmysql.userตาราง. กล่าวอีกนัยหนึ่งในการเข้าถึง mariadb เนื่องจากrootคุณต้องเข้าสู่ระบบในฐานะรูท

แน่นอนว่าการรีสตาร์ท mariadb daemon ของฉันด้วยการพิสูจน์ตัวตนที่จำเป็นฉันสามารถล็อกอินด้วยรูทด้วย

sudo mysql -u root -p

หรือ

sudo su -
mysql -u root -p

หลังจากทำสิ่งนี้แล้วฉันคิดเกี่ยวกับวิธีเข้าถึงโดยไม่ต้องทำ sudo ซึ่งเป็นเพียงเรื่องของการเรียกใช้คำค้นหา mysql เหล่านี้

GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;

(แทนที่<password>ด้วยรหัสผ่านรูท mysql ที่คุณต้องการ) รหัสผ่านที่เปิดใช้งานนี้ล็อกอินสำหรับผู้ใช้รูท

หรือเรียกใช้แบบสอบถาม mysql:

UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin = 'unix_socket';
FLUSH PRIVILEGES;

จะเปลี่ยนบัญชีรูทเพื่อใช้การเข้าสู่ระบบด้วยรหัสผ่านโดยไม่ต้องเปลี่ยนรหัสผ่าน แต่อาจทำให้คุณติดตั้ง mysql / mariadb โดยไม่มีรหัสผ่านรูท

หลังจากนั้นคุณต้องรีสตาร์ท mysql / mariadb:

sudo service mysql restart

และ voila ฉันสามารถเข้าถึงได้จากบัญชีส่วนตัวของฉันผ่านทาง mysql -u root -p

โปรดทราบว่าการทำเช่นนี้เป็นการลดความปลอดภัยสันนิษฐานว่านักพัฒนา MariaDB ได้เลือกที่จะใช้งานการเข้าถึงรูทเช่นนี้ด้วยเหตุผลที่ดี

เมื่อคิดแล้วฉันก็มีความสุขมากที่ได้sudo mysql -u root -pเปลี่ยนกลับไปใช้แบบนั้น แต่ฉันคิดว่าฉันจะโพสต์วิธีแก้ปัญหาของฉันเพราะฉันไม่พบวิธีแก้ปัญหาที่อื่น


7
"ในการเข้าถึง mariadb ในฐานะรูทคุณต้องล็อกอินด้วยรูท" - ประโยคนี้ควรอยู่ด้านบนของคำตอบ
Philipp Ludwig

1
ทำไมคุณถึงเรียกใช้GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>'; คำสั่งสองครั้งก่อนที่จะล้างสิทธิพิเศษ?
Blairg23

4
นี่ควรเป็นที่ที่มองเห็นได้ชัดเจนกว่าเช่นตัวอักษรสีแดงขนาดใหญ่ระหว่างการติดตั้งหรือบางสิ่งบางอย่าง ... เสียเวลาเพียงไม่กี่ชั่วโมงในการพยายามตั้งค่าเซิร์ฟเวอร์ที่ฉันต้องการโดยเร็วที่สุด ....
Gall Annonim

1
btw ถ้าคุณขี้เกียจเหมือนฉันคุณสามารถประหยัดเวลาได้สองวินาทีด้วยsudo service mysql restart
zeisi

1
ขอบคุณสำหรับเคล็ดลับที่ดีสำหรับ dev แต่คุณจะย้อนกลับไปเป็นต้นฉบับได้อย่างไร
Sam

42

ใน Ubuntu 16.04 LTS ที่สะอาดการเข้าสู่ระบบรูท MariaDB สำหรับlocalhostเปลี่ยนจากสไตล์รหัสผ่านเป็นสไตล์การเข้าสู่ระบบ sudo ...

เพียงแค่ทำ

sudo mysql -u root

เนื่องจากเราต้องการเข้าสู่ระบบด้วยรหัสผ่านให้สร้าง 'ผู้ใช้' ของผู้ใช้รายอื่น

ในคอนโซล MariaDB ... (คุณได้รับในคอนโซล MariaDB ด้วย 'sudo mysql -u root')

use mysql
CREATE USER 'user'@'localhost' IDENTIFIED BY 'yourpassword';
\q

จากนั้นใน bash shell prompt

mysql-workbench

และคุณสามารถเข้าสู่ระบบด้วย 'ผู้ใช้' ด้วย 'yourpassword' บน localhost


12

ลองใช้คำสั่ง

sudo mysql_secure_installation

กดและกำหนดรหัสผ่านใหม่สำหรับรากในMySQL / MariaDB

หากคุณได้รับข้อผิดพลาดเช่น

ข้อผิดพลาด 2002 (HY000): ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ภายในผ่านซ็อกเก็ต '/var/run/mysqld/mysqld.sock'

เปิดใช้บริการด้วย

service mysql start

ตอนนี้ถ้าคุณป้อนอีกครั้งด้วย

mysql -u root -p

หากคุณทำตามปัญหาให้ป้อนsudo suและmysql -u root -pใช้สิทธิ์ในการรูท

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '<password>';

นี้ได้รับการแก้ไขปัญหาของฉันในMariaDB

โชคดี



3

ฉันต้องลงชื่อเข้าใช้ Ubuntu ในฐานะรูทเพื่อเข้าถึง Mariadb ในฐานะรูท มันอาจมีบางอย่างเกี่ยวข้องกับ "Harden ... " ที่แจ้งให้คุณทำเมื่อคุณติดตั้งครั้งแรก ดังนั้น:

$ sudo su
[sudo] password for user: yourubunturootpassword
# mysql -r root -p
Enter password: yourmariadbrootpassword

และคุณเข้ามา


2

คำสั่งใหม่ในการล้างสิทธิ์คือ:

FLUSH PRIVILEGES

คำสั่งเก่าFLUSH ALL PRIVILEGESไม่ทำงานอีกต่อไป

คุณจะได้รับข้อผิดพลาดที่มีลักษณะดังนี้:

MariaDB [(none)]> FLUSH ALL PRIVILEGES; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ALL PRIVILEGES' at line 1

หวังว่านี่จะช่วยได้ :)


0

เรียกใช้ mysql_upgrade

ตรวจสอบว่า

SHOW GRANTS FOR 'root'@'localhost';

กล่าวว่า

GRANT ALL PRIVILEGES ON ... WITH GRANT OPTION 

ตรวจสอบว่ามีตาราง _mysql.proxies_priv_

การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้ 'root' @ 'localhost' ขณะพยายามให้สิทธิ์ ฉันจะให้สิทธิ์ได้อย่างไร?


0

ระบบเช่น Ubuntu ต้องการใช้ปลั๊กอินauth_socket มันจะพยายามพิสูจน์ตัวตนโดยการเปรียบเทียบชื่อผู้ใช้ของคุณในฐานข้อมูลและกระบวนการที่สร้างคำขอ mysql มีอธิบายไว้ที่นี่

ปลั๊กอินซ็อกเก็ตตรวจสอบว่าชื่อผู้ใช้ซ็อกเก็ต (ชื่อผู้ใช้ระบบปฏิบัติการ) ตรงกับชื่อผู้ใช้ MySQL ที่ระบุโดยโปรแกรมไคลเอ็นต์กับเซิร์ฟเวอร์หรือไม่และอนุญาตให้เชื่อมต่อเฉพาะเมื่อชื่อตรงกัน

คุณอาจต้องการกลับมาใช้mysql_native_password แทนซึ่งจะต้องใช้ผู้ใช้ / รหัสผ่านเพื่อตรวจสอบสิทธิ์

เกี่ยวกับวิธีการเพื่อให้บรรลุนั้นฉันขอแนะนำสิ่งนี้แทน

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