ฉันจะทำให้ลูกค้า MySQL อ่านรหัสผ่านจาก mylogin.cnf ได้อย่างไร


11

ฉันพยายามทำให้ไคลเอนต์ mysql เชื่อมต่อกับเซิร์ฟเวอร์ mysql โดยไม่ต้องใช้รหัสผ่านในการโต้ตอบ ขั้นตอนดำเนินการ:

1) ขั้นแรกสร้างไฟล์ mylogin.cnf

$ mysql_config_editor set --user=<user> --password --host=<host>
Enter password:

2) สร้างไฟล์สำเร็จแล้ว:

$ ls -la .mylogin.cnf
-rw-------. 1 urmt urmt  136 Dec 19 11:01 .mylogin.cnf
$ mysql_config_editor print --all
[client]
user = <user>
password = *****
host = <host>

3) เชื่อมต่อโดยใช้ไคลเอนต์ mysql

$ mysql <dbname>
ERROR 1045 (28000): Access denied for user '<user>'@'<host>' (using password: NO)

มีค่าเริ่มต้น / การกำหนดค่าที่ทำให้ลูกค้าไม่สนใจรหัสผ่านใน mylogin.cnf หรือไม่? คุณสมบัติผู้ใช้และโฮสต์ถูกอ่านอย่างถูกต้องจากไฟล์

ฉันสามารถเชื่อมต่อได้ดีถ้าฉันให้รหัสผ่านในบรรทัดคำสั่ง:

$ mysql -p <dbname>
Enter password: 
Reading table information...
...
mysql> 

ไคลเอนต์ MySQL รุ่นคือ 5.6.22, เซิร์ฟเวอร์รุ่น MySQL คือ 5.6.22, ทั้งบน Oracle Linux 6 ไคลเอนต์และเซิร์ฟเวอร์อยู่บนโฮสต์ที่แตกต่างกัน

ขอบคุณ

คำตอบ:


2

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

ในสคริปต์สภาพแวดล้อมของคุณ (เช่น~/.profileหรือ~/.bashrc) ให้ตั้งค่า

alias mysql='mysql -uUser -pPasswd -hHostname'

(ใส่ชื่อผู้ใช้ Passwd และชื่อโฮสต์ที่คุณต้องการ)

หลังจาก shell relogin คุณน่าจะทำได้

mysql

... ซึ่งจะใช้นามแฝงของคุณและเชื่อมต่อกับฐานข้อมูลและละเว้นรหัสผ่านใด ๆ ใน.my.cnfไฟล์

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


นี่คือการแก้ไขปัญหาจริง แต่ฉันไม่เป็นไร ฉันยอมรับคำตอบนี้โดยมีข้อจำกัดความรับผิดชอบต่อผู้อ่านในอนาคตว่าวิธีที่เหมาะสมในการทำเช่นนั้นคือคำตอบของ Nawaz แต่นั่นไม่ได้ผลกับสภาพแวดล้อมของฉันด้วยเหตุผลที่ไม่ทราบสาเหตุ ขอบคุณ!
Lefteris Koutsoloukas

1
-1 สิ่งนี้ไม่ตอบแบบสอบถามของ OP หรือหลีกเลี่ยงการเก็บรหัสผ่านในไฟล์ รหัสผ่านจะถูกเก็บไว้ใน. profile แทน. mylogin.cnf แต่ตอนนี้รหัสผ่านถูกแสดงโดยคำสั่ง ps
miracle173

@ miracle โปรดตรวจสอบการอ้างสิทธิ์ของคุณว่า ps จะเปิดเผยรหัสผ่าน ในระบบของฉันรหัสผ่านแสดงมาสก์เป็น xxxxxxx ในเอาต์พุต ps หากไคลเอนต์ MySQL ของคุณไม่ทำงานเหมือนของฉันโปรดโพสต์เวอร์ชัน mysql และ distro ที่คุณใช้งานอยู่ และคุณมีคำตอบที่ดีกว่าสำหรับคำถามจริงของ OP หรือไม่?
Joshua Huber

2
@joshua: แนวทางสำหรับผู้ใช้ปลายทางสำหรับความปลอดภัยของรหัสผ่าน : "ใช้-pyour_passหรือ--password=your_passตัวเลือกในบรรทัดคำสั่ง (... ) สิ่งนี้สะดวก แต่ไม่ปลอดภัย "
miracle173

10

ใช้คำสั่งต่อไปนี้เพื่อตั้งค่าเส้นทางการเข้าสู่ระบบก่อน

ชุด mysql_config_editor --login-path = lgpath --user =
รหัสผ่านroot -p

จากนั้นใช้คำสั่งด้านล่างเพื่อเข้าสู่ระบบ mysql

mysql --login-path = lgpath

ความช่วยเหลือเกี่ยวกับตัวเลือกเส้นทางการเข้าสู่ระบบ mysql สามารถดูได้

ชุด mysql_config_editor - ช่วย


ฉันพยายามตั้งค่าเส้นทางการเข้าสู่ระบบอย่างชัดเจนตามที่คุณแนะนำ แต่น่าเสียดายที่มันมีพฤติกรรมแบบเดียวกัน: $ mysql_config_editor print - all [lgpath] user = <user> password = ***** host = <host> $ mysql --login -path = lgpath ข้อผิดพลาด 1045 (28000): การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้ '<user>' @ '<host>' (ใช้รหัสผ่าน: ไม่มี)
Lefteris Koutsoloukas

3

ฉันมีปัญหาเดียวกันกับ OP แต่คำตอบในกระทู้นี้ทำให้ฉันสับสน ลิงก์ของ Vinay Mandala ใช้งานได้จริงสำหรับฉัน โพสต์ที่นี่อีกครั้งเพื่อความชัดเจน

ปัญหาของฉัน:

ERROR 1045 (28000): Access denied for user '<user>'@'<host>' (using password: NO)

มันพิสูจน์ว่าmysql_config_editorไม่จัดการอักขระพิเศษในรหัสผ่านอย่างถูกต้อง

สารละลาย:

เมื่อmysql_config_editorพร้อมท์ให้ใส่รหัสผ่านตรวจสอบให้แน่ใจว่าคุณใส่รหัสผ่านในเครื่องหมายคำพูดคู่ (")หลังจากนั้นคุณสามารถเข้าสู่ระบบได้


1

ฉันได้รับข้อผิดพลาดนี้ยกเว้นจะกล่าวว่า (ใช้รหัสผ่าน: ใช่)

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


0

คำตอบของ Nawaz นั้นถูกต้อง ฉันมีน้อยที่จะเพิ่ม ฉันขอแนะนำให้คุณลองใช้ตัวแปรสภาวะแวดล้อม MYSQL_TEST_LOGIN_FILE เพื่อสร้างไฟล์กำหนดค่าใหม่ในกรณีที่ไฟล์เริ่มต้นเสียหาย ใช้--no-defaultsเพื่อข้าม.cnfไฟล์ ถ้ารหัสผ่านมีถ่าน#, mysql login-pathไม่ทำงาน

$ export MYSQL_TEST_LOGIN_FILE=$HOME/mylogin.cnf

$ mysql_config_editor set --login-path=mytest --host=127.0.0.1 --port=5622 --user=mytest --password
Enter password:

$ ls -l $MYSQL_TEST_LOGIN_FILE
-rw------- 1 mysql mysql 288 Feb 27 14:25 mylogin.cnf

$ mysql --no-defaults --login-path=mytest test

ตัวแปรสภาพแวดล้อมนี้ไม่ได้ตั้งค่า ฉันตั้งค่าไว้ แต่ฉันก็มีพฤติกรรมเหมือนกันทุกประการ มันไม่สนใจรหัสผ่านใน mylogin.cnf
Lefteris Koutsoloukas

คุณแน่ใจหรือว่าผู้ใช้ที่mysqlสั่งงานexec คือmysqlอะไร? ถ้าไม่ได้เปลี่ยนเจ้าของmylogin.cnfและมันควรจะเป็นผลงาน :)
Iazel

0

ฉันพบปัญหาคล้ายกันกับโปสเตอร์ต้นฉบับ ฉันสงสัยว่ามันเกี่ยวข้องกับตัวละครในรหัสผ่านซึ่งไม่ได้รับการเข้ารหัส / ถอดรหัสอย่างถูกต้อง

เพื่อยืนยันลองเปลี่ยนรหัสผ่านเป็นสิ่งที่ง่ายและดูว่าปัญหานี้จะหายไป


ฉันมีปัญหาเดียวกัน ในฐานะที่เป็นPlazgothชี้ให้เห็นฉันมีอักขระพิเศษในรหัสผ่านและมันก็ไม่ได้ทำงาน สิ่งที่ได้ผลสำหรับฉันคือข้อเสนอแนะจากผู้ใช้bgladในโพสต์
Vinay Mandala

0

ฉันมีปัญหากับเชลล์สคริปต์ สคริปต์ของฉันกำลังเปลี่ยนแปลงค่า $ HOME และสิ่งนี้ทำให้ --login-path = *** ดูเหมือนจะถูกละเว้น เมื่อฉันหยุดเปลี่ยนค่า $ HOME จากนั้นก็เริ่มทำงาน


0

หมายเหตุหากคุณพยายามใช้งานpathภายใต้ผู้ใช้ linux root - คุณไม่สามารถใช้งานsudoได้ คุณต้องเข้าสู่ระบบในฐานะ root ของ IE

user@server:$ sudo su
user@server:$ Enter Password
root@server:$ mysql_config_editor set --login-path=data-main --user=<user> --password --host=<host>
root@server:$ Enter Password
root@server:$ exit
user@server:$ ...

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

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