Saya memiliki kata sandi MySQL yang tersimpan di file foo.php
, misalnya P455w0rd
, ketika saya mencoba menggunakannya:
$ cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2 | mysql -U root -p mydb -h friendserver
Enter password: (holds)
$ echo P455w0rd | mysql -u root -p mydb -h friendserver
Enter password: (holds)
Kedua opsi tersebut masih meminta kata sandi, bagaimana cara yang benar untuk mengirim kata sandi dari stdin
?
Anda harus sangat berhati-hati dalam memberikan kata sandi pada baris perintah, karena jika Anda tidak berhati-hati, Anda akan membiarkannya terbuka untuk diendus dengan alat seperti ps
.
Cara paling aman untuk melakukan ini adalah dengan membuat berkas konfigurasi baru dan mengopernya ke mysql
dengan menggunakan opsi baris perintah --defaults-file=
atau --defaults-extra-file=
.
Perbedaan antara keduanya adalah bahwa yang terakhir dibaca sebagai tambahan dari file konfigurasi default sedangkan dengan yang pertama, hanya satu file yang diteruskan sebagai argumen yang digunakan.
File konfigurasi tambahan Anda harus berisi sesuatu yang mirip dengan:
[client]
user=foo
password=P@55w0rd
Pastikan Anda mengamankan berkas ini.
Lalu jalankan:
mysql --defaults-extra-file=<path to the new config File> [all my other options]
Utilitas klien mysql
dapat mengambil kata sandi pada baris perintah dengan opsi -p
atau --password=
.
Jika Anda menggunakan -p
, tidak boleh ada spasi kosong setelah huruf opsi:
$ mysql -pmypassword
Saya lebih suka opsi yang panjang dalam skrip karena opsi tersebut mendokumentasikan dirinya sendiri:
mysql --password=mypassword --user=me --host=etc
Jika Anda ingin memulai mysql
dengan kata sandi yang disediakan, Anda harus mengambil kata sandi dalam sebuah variabel terlebih dahulu:
MYSQLPASS=`cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2`
Kemudian Anda dapat memulai perintah mysql
Anda dengan:
mysql -U root -p ${MYSQLPASS} mydb -h friendserver