Kami memiliki skrip baris perintah PHP untuk versi database. Kami menjalankan skrip ini setiap kali pengembang menambahkan tambalan basis data baru.
Script menjalankan tambalan dengan baris perintah MySQL:
system('mysql --user=xxx --password=xxx < patch.sql');
Namun, MySQL 5.6 sekarang mengeluarkan peringatan berikut:
Peringatan: Menggunakan kata sandi pada antarmuka baris perintah dapat menjadi tidak aman
Yang jelas benar, tetapi mungkin atau mungkin tidak menjadi masalah bagi pengguna.
- Apa alternatif yang aman ?
- Atau, apakah mungkin untuk menonaktifkan peringatan ini?
Harap dicatat bahwa saya tidak mau harus bergantung pada file kata sandi eksternal.
mysql
php
command-line-interface
Benjamin
sumber
sumber
Jawaban:
Dalam versi GA baru-baru ini dari MySQL, yaitu, versi 5.6 , Anda dapat melakukan ini melalui perintah mysql_config_editor, seperti dijelaskan dalam http://dev.mysql.com/doc/refman/5.6/id/mysql-config-editor.html
Pada dasarnya apa yang dilakukannya adalah: mengenkripsi pengguna / memberikan kredensial Anda dengan alias host, dan kemudian Anda menggunakan alias host, memasukkan informasi ini ke file konfigurasi di direktori home Anda, dan kemudian, ketika Anda membutuhkannya, daripada melakukan sesuatu seperti :
Anda malah menulis:
dengan demikian menghindari untuk memasukkan kata sandi Anda ke dalam beberapa skrip di cleartext.
Agar ini berfungsi, Anda harus terlebih dahulu (hanya sekali) mendefinisikan
myhostalias
sebagai:Anda dapat menggunakan jalur masuk berbeda untuk akun dan / atau host yang berbeda sesuai keinginan. Ide bagus jika Anda bertanya kepada saya.
Sebagai catatan, saya percaya, fungsi ini TIDAK ada dalam versi apa pun di bawah 5.6.
sumber
mysql_config_editor
, jadi sayangnya itu tidak membawa nilai lebih. Saya juga mencoba untuk menghindari pengembang melakukan secara manual, sehingga harus memelihara baik file konfigurasi PHP dan konfigurasi mysql.Gunakan opsi
--defaults-file
atau--defaults-extra-file
. Anda dapat menentukan ID pengguna dan kata sandi di dalamnya. Ini memiliki format yang sama dengan/etc/my.cnf
.Membaca lebih lanjut, Anda mengatakan bahwa Anda tidak ingin harus bergantung pada file kata sandi eksternal, tetapi itu adalah satu-satunya cara yang benar-benar aman. Apa pun yang lain akan meninggalkan jejak di tabel proses atau sesuatu. Anda bahkan dapat meletakkan file kata sandi di kontrol versi jika Anda benar-benar menginginkannya. Jadikan 600 (atau 400) dan hanya dapat dibaca oleh mysql atau pengguna yang menjalankannya.
sumber
mysql --defaults-file c:\some\dirs\my.cnf
mysql
klien konsol?Anda memiliki 4 opsi per http://dev.mysql.com/doc/refman/5.1/en/password-security-user.html
-pyour_pass
atau--password=your_pass
pada baris perintah-p
atau--password
pada baris perintah tanpa nilai kata sandi yang ditentukan. Dalam hal ini, program klien mengumpulkan kata sandi secara interaktif:MYSQL_PWD
variabel lingkunganUntuk kebutuhan Anda,
MYSQL_PWD
mungkin merupakan opsi, tetapi tidak lebih aman. Benar-benar Anda harus menelurkan proses interaktif dengan--password
dan mengirimkan kata sandi secara interaktif, tapi itu solusi yang cukup kompleks untuk masalah ini.sumber
man ps
memiliki-E Display the environment as well.
Dari url saya terkait dengan: Metode menentukan sandi MySQL Anda harus dianggap sangat tidak aman dan tidak boleh digunakan. Beberapa versi ps menyertakan opsi untuk menampilkan lingkungan proses yang sedang berjalan. Pada beberapa sistem, jika Anda mengatur MYSQL_PWD, kata sandi Anda akan terpapar ke pengguna lain yang menjalankan ps. Bahkan pada sistem tanpa versi ps seperti itu, tidak bijaksana untuk berasumsi bahwa tidak ada metode lain di mana pengguna dapat memeriksa lingkungan proses.ps
dan melihat argumen baris perintah untuk setiap proses setiap pengguna. Tetapips e
hanya menampilkan lingkungan untuk proses Anda sendiri (kecuali Anda root tentu saja). Hanya sedikit lebih aman, tetapi masih lebih aman.Jika skrip PHP Anda sudah memiliki koneksi database terbuka, mengapa Anda tidak menggunakan saja
mysqli_multi_query()
untuk mengimpor file .sql? Jika sintaks file .sql valid, tentu saja ...sumber