mysqldump ถามรหัสผ่านใน shellscript


9

ฉันเขียนเชลล์สคริปง่ายๆเพื่อทิ้งฐานข้อมูล MySQL เฉพาะ ปัญหาคือมันทำให้ฉันขอรหัสผ่านแม้ว่าฉันจะให้ mysql db เป็นรุ่น 5.0.27 หากมีความสำคัญ นี่คือบรรทัดเฉพาะที่ฉันใช้

$MYSQLDUMP -u backup -p$MyPass $DB > $DEST/$FILE

ฉันลองหลายรูปแบบ แต่ก็ไม่มีประโยชน์

คำตอบ:


4

ฉันจะเดิมพันที่$MyPassไม่ได้ตั้งค่าอย่างถูกต้องในสคริปต์ของคุณ หากเครื่องมือบรรทัดคำสั่งใด ๆ ของ mysql ได้รับรหัส-pที่ไม่ได้ตามด้วยรหัสผ่านในทันทีพวกเขาคิดว่าพวกเขาควรขอรหัสผ่าน ในทางกลับกันถ้าคุณให้รหัสผ่านไม่ถูกต้อง (หรือชื่อผู้ใช้ผิดหรือคล้ายกัน) มันจะไม่สามารถเชื่อมต่อได้

ดังนั้นฉันขอแนะนำให้วางechoคำสั่งไว้ที่จุดเริ่มต้นของบรรทัดนั้นและเรียกใช้สคริปต์ของคุณอีกครั้งเช่น:

echo $MYSQLDUMP -u backup -p$MyPass $DB

อย่าลืมลบการเปลี่ยนเส้นทางออก


1
doh เป็นตัวแปรโง่ ๆ มี pass ในตัวพิมพ์ใหญ่เมื่อมันถูกตั้งค่าให้เป็นตัวพิมพ์เล็กในบรรทัดด้านบน ขอบคุณครับ
aduljr

18

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

ส่งผ่าน--defaults-extra-file=/pathto/database.cnfไปยังการถ่ายโอนข้อมูล mysql

ไฟล์การกำหนดค่าต้องมีลักษณะเช่นนี้ ตั้งค่าสิทธิ์ระบบไฟล์เพื่อให้กระบวนการสำรองข้อมูลเท่านั้นที่สามารถเปิดไฟล์การกำหนดค่าได้

[client]
host     = servername.domain.tld
user     = backup
password = strongpassword

อัปเดต (2016-06-29) หากคุณใช้ mysql 5.6.6 ขึ้นไปคุณควรดูเครื่องมือmysql_config_editorที่ให้คุณจัดเก็บข้อมูลประจำตัวในไฟล์ที่เข้ารหัส ขอบคุณGiovanni ที่พูดถึงสิ่งนี้กับฉัน


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

3
ฉันรู้ว่านี่เป็นคำตอบเก่า แต่ก็ยังปรากฏขึ้นเมื่อค้นหาวิธีการส่งรหัสผ่านอย่างปลอดภัยและมันก็เชื่อมโยงจากโพสต์อื่น ๆ ด้วย เมื่อใช้เวอร์ชัน 5.5 ฉันต้องสรุปคำว่า strongpassword ด้วยเครื่องหมายขีดเดียวในไฟล์กำหนดค่าเช่นถ้ารหัสผ่านของฉันคือaoeu1234ไฟล์ปรับแต่งของฉันมีpassword = 'aoeu1234'; มิฉะนั้นคุณจะได้รับข้อผิดพลาดที่ไม่ได้รับอนุญาต
Damon

สงสัยว่ามีวิธีแก้ปัญหาที่ไม่รวมรหัสผ่านในข้อความธรรมดาในไฟล์. cnf หรือไม่
Bob Stein

@Zoredache ว่า "ทุกคนที่สามารถเรียกใช้ ps สามารถค้นหารหัสผ่านสำหรับเซิร์ฟเวอร์ของคุณ" ได้อย่างไร
Pacerier

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