Saya sedang membangun skrip Bash untuk beberapa tugas. Salah satu tugas tersebut adalah membuat DB MySQL dari skrip bash yang sama. Apa yang saya lakukan saat ini adalah membuat dua vars: satu untuk nama pengguna toko dan yang lainnya untuk kata sandi toko. Ini adalah bagian yang relevan dari skrip saya:
MYSQL_USER=root
MYSQL_PASS=mypass_goes_here
touch /tmp/$PROY.sql && echo "CREATE DATABASE $DB_NAME;" > /tmp/script.sql
mysql --user=$MYSQL_USER --password="$MYSQL_PASS" < /tmp/script.sql
rm -rf /tmp/script.sql
Tetapi selalu mendapatkan kesalahan yang mengatakan akses ditolak untuk root pengguna dengan NO PASSWORD, apa yang saya lakukan salah? Saya perlu melakukan hal yang sama untuk PostgreSQL.
linux
mysql
bash
postgresql
shell-scripting
ReynierPM
sumber
sumber
echo "$MYSQL_PASS"
sebelum Anda meneruskannya kemysql
baris. Apakah ada kata sandi yang benar?ps wwaux
.Jawaban:
Baik untuk MySQL dan PostgreSQL Anda dapat menentukan pengguna dan kata sandi Anda dalam file konfigurasi lokal. .my.cnf untuk MySQL dan .pgpass untuk PostgreSQL. File-file ini harus di direktori home Anda (mis. ~ / .My.cnf).
.my.cnf:
.pgpass:
Anda dapat memiliki entri wildcard di sini, menggantikan bidang apa pun dengan *******.
PS: JANGAN PERNAH MENYESUAIKAN PASSWORD DI ATAS PERINTAH! Ini dapat terlihat sempurna dengan ps jika sistem Anda tidak dikonfigurasikan untuk tidak menunjukkan proses yang menjadi milik pengguna lain.
@ Thinice: Jika Anda ingin membuat file-file itu benar-benar aman, Anda harus melakukannya:
Dengan cara ini file akan dibuat dengan izin yang aman sejak awal dan tidak ada penyadap yang akan memiliki kesempatan untuk mencuri kata sandi Anda.
PostgreSQL akan menolak untuk menggunakan file dengan izin lebih tinggi pada 0600.
sumber
--defaults-extra-file=filename
. Ini mungkin berguna jika Anda ingin menempatkannya di tempat yang tidak standar, atau hanya membuat file sementara. Diduga mereka adalah opsi yang mirip dengan PostgreSQL, tapi saya tidak terbiasa dengan itu.0600
Ini akan melakukan triknya Terima kasih
sumber
Bagaimana cara menjalankan baris perintah dengan kata sandi yang aman ?? gunakan editor konfigurasi !!!
Pada mysql 5.6.6 Anda dapat menyimpan kata sandi dalam file config dan kemudian menjalankan perintah cli seperti ini ....
--login-path menggantikan variabel ... host, pengguna DAN kata sandi. sangat bagus!
sumber
pastikan bagaimana Anda menulis pass Anda dan itu tidak luput
--defaults-extra-file = adalah hal yang baik (tm) (c)
sumber
Jangan menaruh tanda kutip di sekitar kata sandi karena jika Anda melakukannya tanda kutip dianggap sebagai bagian dari kata sandi.
sumber
Pertanyaan serupa ada di StackOverflow.
Untuk meringkas jawaban saya dari sana.
Kamu bisa
export MYSQL_PWD=yourverysecretpassword
.Kelebihan metode ini dalam menggunakan file konfigurasi adalah Anda tidak perlu file konfigurasi terpisah untuk tetap sinkron dengan skrip Anda. Anda hanya memiliki skrip untuk dipelihara.
Tidak ada kerugian untuk metode ini.
Kata sandi tidak terlihat oleh pengguna lain di sistem (itu akan terlihat jika ada di baris perintah). Variabel lingkungan hanya terlihat oleh pengguna yang menjalankan perintah mysql, dan root.
Kata sandi juga akan terlihat oleh siapa saja yang dapat membaca skrip itu sendiri, jadi pastikan skrip itu sendiri terlindungi. Ini sama sekali tidak berbeda dengan melindungi file konfigurasi. Anda masih dapat sumber kata sandi dari file terpisah jika Anda ingin agar skrip dapat dibaca
export MYSQL_PWD=$(cat /root/mysql_password)
untuk umum ( misalnya). Masih lebih mudah untuk mengekspor variabel daripada membangun file konfigurasi.Misalnya,
sumber