Şifreyi mysql komut satırına geçirme


20

Kullanmaya çalıştığımda, foo.phpörneğin P455w0rd, bir dosyaya MySQL şifresi kaydedildi :

$ 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)

Her iki seçenek de hala parola soruyor, parola göndermenin doğru yolu stdinnedir?


3
ile -pşifreniz arasında boşluk olmamalıdır .
Fırat KÜÇÜK

mysql stdin şifresini okumuyor, ne okuduğunu anlayamadım.
Omn

Doğru yanıt, şifrelerinizi /proc, program çalıştığı sürece erişimi olan herkesin önemsiz bir şekilde okuyabileceği komut satırına koymayın . İşte bu ne ~/.my.cnfiçin, doğru şekilde 0600
Shadur

Yanıtlar:


25

Şifreleri komut satırlarına nasıl geçirdiğiniz konusunda çok dikkatli olmalısınız, çünkü dikkatli değilseniz, gibi araçları kullanarak koklamaya açık bırakacaksınız ps.


Bunu yapmanın en güvenli yolu yeni bir yapılandırma dosyası oluşturmak mysqlve --defaults-file=veya --defaults-extra-file=komut satırı seçeneğini kullanarak bu dosyaya aktarmak olacaktır .

İkisi arasındaki fark, ikincisinin varsayılan yapılandırma dosyalarına ek olarak okunması, öncekiyle ise yalnızca argüman olarak geçirilen tek dosyanın kullanılmasıdır.

Ek yapılandırma dosyanız aşağıdakine benzer bir şey içermelidir:

[client]
user=foo
password=P@55w0rd

Bu dosyayı koruduğunuzdan emin olun.

O zaman koş:

mysql --defaults-extra-file=<path to the new config file> [all my other options]

2
MySQL argv, -pbayrağa verilen parametrelerin üzerine yazmak için değiştirecektir . En azından burada, ilgili diğer bilgilerle birlikte sonuçlanan şey budur: unix.stackexchange.com/questions/78757/…
Kusalananda

Bu, bir güvenlik önlemi sağladığı için en iyi çözümdür. Go-rwx dosyasını kullanmanız ve bu bağımsız değişkenin diğer tüm bağımsız değişkenlerden önce geldiğinden emin olmanız gerekir.
ChuckCottrill

1
@Kusalananda, evet, ama yapılan yorumlar gereğince unix.stackexchange.com/q/385339/135943 , o gelmez güvenli demek!
Joker

--login-pathŞimdi desteklendiğine dair bir not eklemeye değer olabilir . Bundan daha iyi değil, ama biraz daha az düz metin (içeriği düz metne dönüştürme engeli düşük olsa da).
Geoffrey Wiseman

6
Ortamda MYSQL_PWD ayarını yapın ( export MYSQL_PWD=muhpassword) ve komutunuzu -p. Bkz. MySQL Program Ortamı Değişkenleri . Kılavuzun korkunç uyarılarına rağmen , bu oldukça güvenlidir . Daha sonra aynı kabukta garip warez başlatmazsanız. Bu yüzden koşuyoruz:MYSQL_PWD=$(cat foo.php etc) mysql -u foouser -h barhost
David Tonhofer

12

mysqlİstemci yarar biriyle komut satırında bir şifre alabilir -pveya --password=seçenekler.

Kullanırsanız -p, seçenek harfinden sonra boşluk olmamalıdır:

$ mysql -pmypassword

Kendiliğinden belgelendikleri için komut dosyalarındaki uzun seçenekleri tercih ederim:

mysql --password=mypassword --user=me --host=etc

3
Herhangi bir kullanıcı parolayı doğrudan /proc/$pid/cmdlineveya pskomut aracılığıyla görüntüleyebileceğinden, bu güvenli değildir . MySQL'in başlatma sırasında argv'de parolanın üzerine yazdığı doğrudur, ancak her zaman başka bir kullanıcının parolayı gözlemleyebileceği bir zaman penceresi vardır. Ayrıca, bazı sistemlerde argv üzerine yazma çalışmayabilir.
maxschlepzig

3

mysqlBir parola ile başlamak istiyorsanız, önce bir değişkende parolayı almanız gerekir:

MYSQLPASS=`cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2`

Ardından mysqlkomutunuzu şu şekilde başlatabilirsiniz :

mysql -U root -p ${MYSQLPASS} mydb -h friendserver

1
Bu aynı zamanda şifre güvenliğinizi tehlikeye atar . Olduğunu unutmayın MYSQL_PWDtarafından okunan ortam değişkeni mysqlbelirttiğiniz yoksa -p. Ve Linux altında bu güvenli bir yöntemdir çünkü bir kullanıcının çevresi diğer bağımsız kullanıcılar tarafından okunamaz - argüman vektörünün aksine.
maxschlepzig
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.