Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

หลีกเลี่ยงการใส่รหัสผ่านบรรทัดคำสั่ง MySQL Utilities ด้วย my.cnf

การใส่รหัสผ่านในบรรทัดคำสั่ง (Command Line) เช่น mysql -u root -p'password' ไม่ปลอดภัย เพราะปรากฏใน Process List และ History ให้เก็บ Credential ไว้ในไฟล์ my.cnf (Linux/Mac) หรือ my.ini (Windows) แทน

หาตำแหน่งไฟล์ Config

mysql> SELECT @@datadir;
+---------------------------------------------+
| @@datadir                                   |
+---------------------------------------------+
| C:\ProgramData\MySQL\MySQL Server 8.0\Data\ |
+---------------------------------------------+
1 row in set (0.00 sec)

ไฟล์ Config มักอยู่ที่:

  • Windows: C:\ProgramData\MySQL\MySQL Server X.Y\my.ini
  • Linux: /etc/my.cnf, /etc/mysql/my.cnf, ~/.my.cnf
  • macOS (Homebrew): /usr/local/etc/my.cnf

เพิ่ม Credential ใน my.cnf

[client]
user = root
password = "yourPassword"

[mysql]
user = root
password = "yourPassword"

[mysqldump]
user = root
password = "yourPassword"

[mysqldiff]
user = root
password = "yourPassword"

[mysqladmin]
user = root
password = "yourPassword"

[mysqlcheck]
user = root
password = "yourPassword"

ตั้งค่าสิทธิ์ไฟล์ (Linux/macOS) - สำคัญมาก!

chmod 600 ~/.my.cnf
# หรือ
chmod 600 /etc/my.cnf

ป้องกัน User อื่นอ่านไฟล์ได้

ทดสอบการทำงาน

# ตอนนี้รันคำสั่งโดยไม่ต้องใส่ -p
mysql
mysqldump mydb
mysqlcheck mydb

ใช้ Login Path (MySQL 5.6+) - ทางเลือกที่ปลอดภัยกว่า

# สร้าง Login Path (เข้ารหัสเก็บใน .mylogin.cnf)
mysql_config_editor set --login-path=local --user=root --password

# ใช้งาน
mysql --login-path=local
mysqldump --login-path=local mydb

mysql_config_editor จะเก็บรหัสผ่านเข้ารหัส ไม่ใช่ Plain Text

ตัวเลือกอื่นๆ

  • Environment Variables: MYSQL_PWD=password mysql -u root (ยังมองเห็นใน Process List บาง OS)
  • Expect Script: สำหรับ Automation ที่ซับซ้อน
  • Vault/Secrets Manager: สำหรับ Production (HashiCorp Vault, AWS Secrets Manager, Azure Key Vault)

สรุปแนวทางปฏิบัติที่ดี

  1. ห้าม Hardcode Password ใน Script / Code / CI/CD Config
  2. ใช้ mysql_config_editor (Login Path) สำหรับ Local Dev / Admin
  3. ใช้ Secrets Manager สำหรับ Production
  4. ตั้งค่า chmod 600 สำหรับ Config File
  5. หมุนรหัสผ่านเป็นระยะ (Rotation)