Linux

不使用root密碼通過命令行連接MySQL?

  • July 24, 2020

我正在為某些任務建構一個 Bash 腳本。其中一項任務是在同一個 bash 腳本中創建一個 MySQL 數據庫。我現在正在做的是創建兩個變數:一個用於儲存使用者名,另一個用於儲存密碼。這是我的腳本的相關部分:

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

但是總是得到一個錯誤,說沒有密碼的使用者 root 訪問被拒絕,我做錯了什麼?我需要對 PostgreSQL 做同樣的事情。

對於 MySQL 和 PostgreSQL,您可以在本地配置文件中指定您的使用者和密碼。.my.cnf 用於 MySQL 和 .pgpass 用於 PostgreSQL。這些文件應該在您的主目錄中(即~/.my.cnf)。

.my.cnf:

[mysql]
user=user
password=password

.pgpass:

host:port:database:user:password

您可以在此處輸入萬用字元,用任何欄位替換 *******。

PS:永遠不要在命令行上指定密碼!如果您的系統未配置為不顯示屬於其他使用者的程序,則使用ps可以完全看到這一點。

@thinice:如果你想創建那些真正安全的文件,你應該這樣做:

umask 077
touch .my.new.config
umask 022 # or whatever was your default

這樣,從一開始就可以使用安全權限創建文件,並且沒有竊聽者有機會竊取您的密碼。

無論如何,PostgreSQL 將拒絕使用權限高於 0600 的文件。

引用自:https://serverfault.com/questions/399262