เปิดใช้งานการเข้าถึง MySQL โดยไม่มีรหัสผ่าน


15

ฉันจะลบรหัสผ่านสำหรับ MySQL ได้อย่างไร ฉันไม่ต้องการมีรหัสผ่านเพื่อเชื่อมต่อกับฐานข้อมูล เซิร์ฟเวอร์ของฉันใช้งาน Ubuntu


เป็นเรื่องที่น่าสนใจทำไมคุณไม่ต้องการรหัสผ่าน?
John Gardeniers

ตัวอย่างเช่นฉันพบข้อผิดพลาดเมื่อฉันเรียกใช้ "dpkg-reconfigure phpmyadmin" มันหยุดด้วยข้อผิดพลาด 1,045 ด้วยการเข้าถึงรหัสผ่านที่ถูกปฏิเสธ root @ localhost ":" ไม่สิ้นสุด
Lacek

คำตอบ:


29

โดยส่วนตัวฉันคิดว่าเป็นการดีกว่าที่จะตั้งรหัสผ่านและบันทึกไว้ใน /root/.my.cnf:

ครั้งแรก:

mysqladmin -u root password 'asdfghjkl'

จากนั้นแก้ไขไฟล์. my.cnf ของรูท:

[client]
password = asdfghjkl

chmod 0600 .my.cnfตรวจสอบให้แน่ใจ

ตอนนี้คุณมีรหัสผ่าน แต่คุณไม่ได้รับพร้อมท์อีกต่อไป การติดตั้งเซิร์ฟเวอร์ MySQL เริ่มต้นของฉันคือรหัสผ่านที่ไม่ซ้ำกันแบบสุ่มสำหรับเซิร์ฟเวอร์ MySQL แต่ละตัวบันทึกไว้ในไฟล์. my.cnf เช่นนี้


1
ฉันเห็นด้วยอย่างยิ่งกับการตั้งค่าสภาพแวดล้อมของคุณให้รับรองความถูกต้องของคุณโดยอัตโนมัติเทียบกับการลบรหัสผ่าน
Zoredache

2
คุณอาจต้องใส่เครื่องหมายคำพูดล้อมรอบรหัสผ่านใน. my.cnf มันไม่ได้ผลสำหรับฉันถ้าไม่มี
67641

1
@ user67641: อาจขึ้นอยู่กับรุ่นและรหัสผ่านของคุณคืออะไร ... Mine คือสตริงตัวอักษรและตัวเลขแบบสุ่มที่มีความยาวทั้งหมด (ไม่มีตัวอักษรพิเศษ) และไม่จำเป็นต้องมีเครื่องหมายคำพูด
Freiheit

2
หากคุณต้องการสร้าง /root/.my.cnf จะต้องมีการตั้งค่าการอนุญาต 0600 อย่างชัดเจนเพื่อให้แน่ใจว่าไม่มีผู้ใช้รายอื่นสามารถสอดแนม เวลาส่วนใหญ่ที่ผู้ใช้ทั่วไปไม่สามารถลงไปสู่ ​​/ รูทได้ แต่ความหวาดระแวงพิเศษนั้นมักจะได้รับการรับประกันเสมอ
เดลเดอร์สัน

ที่ขาดหายไป mv ./+%Y%m%d. $ db.sql $ OUTPUT` ระหว่าง mysqldump และ gzip
Siddharth

9

หากคุณมีรหัสผ่านที่ตั้งไว้สำหรับ MySQL ให้ทำตามคำแนะนำในการกู้คืนรหัสผ่าน root ของ MySQLจากนั้นตั้งค่ารหัสผ่านเป็น null:

สำหรับ 5.7.6 และใหม่กว่า

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass'

สำหรับ 5.7.5 และก่อนหน้า

update user set password=PASSWORD("") where User='root';

* ต้องมีการรีสตาร์ท DB (ดูคำแนะนำที่ลิงค์) เพื่อให้สิ่งนี้มีผล

sudo service mysql restart

ในกรณีนี้อย่าลืม "ล้างสิทธิ์"
Marco Ramos

@meyosef - โปรดทำเครื่องหมายคำตอบตามที่ได้รับคำตอบหากมันแก้ปัญหาของคุณได้ (คลิกที่เครื่องหมายถูกสีเขียวใต้จำนวนคะแนน)
jneves

ฉันคิดว่าฉันสามารถใช้รหัสผ่านที่ว่างเปล่าสำหรับซ็อกเก็ต Unix เท่านั้นและไม่ย้อนกลับ แต่ไม่สามารถทำได้ unix_socketปลั๊กอินไม่เป็นสิ่งที่แตกต่างกันเล็กน้อย
อ่าง

9

ใช่รหัสผ่านน้อยอาจเป็นสิ่งที่ดี แต่อย่าเพิ่งเปิดฐานข้อมูลสำหรับทุกคน

ผ่าน unix_socket:

grant usage on *.* to 'root'@'localhost' identified via unix_socket;

สิ่งนี้จะช่วยให้คุณใช้ mysql แบบไม่ต้องใส่รหัสผ่านสำหรับผู้ใช้ root ในระบบ Btw นี่เป็นค่าเริ่มต้นในการเผยแพร่ ubuntu / debian ล่าสุด

some_user@box: mysql -u root  # denied
root@box: mysql               # good
some_user@box: sudo mysql     # good, if "some_user" has sudo rights.

สไลด์อธิบาย: https://www.slideshare.net/ottokekalainen/less-passwords-more-security-unix-socket-authentication-and-other-mariadb-hardening-tips


2
ยินดีต้อนรับสู่ SF! คำตอบแรกที่น่ารัก: ชัดเจนสรุปที่ดีลิงค์สำหรับการสำรวจเพิ่มเติมและเพิ่มบางสิ่งบางอย่างไปยังคลังคำตอบที่มีอยู่ ฉันดีใจที่ได้เป็นคนแรกของคุณและฉันหวังว่าคุณจะอยู่รอบ ๆ เพื่อเขียนคำตอบเพิ่มเติมเช่นนี้
MadHatter

สไลด์ไม่เป็นไร แต่นี่เป็นเอกสารจริง: mariadb.com/kb/en/library/authentication-plugin-unix-socket
JonnyJD

5

คุณยังสามารถทำสิ่งต่อไปนี้

grant all privileges on *.* to 'root'@'localhost' identified by '';

1

ฉันค่อนข้างมั่นใจว่าโดยค่าเริ่มต้นจะไม่มีรหัสผ่านหากผู้ใช้ของคุณเป็นผู้ดูแลระบบและเข้าถึงได้ในเครื่อง คุณกำลังค้นหาสิ่งที่แตกต่างกว่านั้นหรือไม่?

มันใช้ได้ไหม?

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