一部のタスク用のBashスクリプトを作成しています。これらのタスクの1つは、同じbashスクリプト内からMySQL DBを作成することです。私が今やっているのは、ストアのユーザー名用とストアのパスワード用の2つの変数を作成することです。これは私のスクリプトの関連部分です:
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の両方で、ローカル設定ファイルでユーザーとパスワードを指定できます。 MySQLの場合は.my.cnf、PostgreSQLの場合は.pgpass。これらのファイルは、ホームディレクトリ(〜/ .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より高い権限を持つファイルの使用を拒否します。
MYSQL_USER="root"
MYSQL_PASSWORD="PASSWORD"
DBNAME="DB_NAME"
mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "CREATE DATABASE $DBNAME;" 2> /tmp/error1
STATUS=$?
if [ $STATUS -eq 0 ];
then
echo -e "Database '$DBNAME' is created"
Elif (grep -i "^ERROR 1007" /tmp/error1 > /dev/null);
then
echo -e "Database '$DBNAME' already exists"
else
echo -e "Failed to create database '$DBNAME'"
fi
rm -r /tmp/error1
これはトリックを行いますありがとう
mysql_config_editor set --login-path=storedPasswordKey --Host=localhost --user=root --password
安全なパスワードを使用してコマンドラインを実行するにはどうすればよいですか?設定エディタを使用してください!!!
Mysql 5.6.6以降では、パスワードを設定ファイルに保存して、次のようなcliコマンドを実行できます。
mysql --login-path=storedPasswordKey ....
--login-pathは変数を置き換えます...ホスト、ユーザー、およびパスワード。すばらしい!
パスワードを引用符で囲まないでください。引用符はパスワードの一部と見なされます。
同様の質問 がStackOverflowに存在します。
要約すると 私の答え そこから。
_export MYSQL_PWD=yourverysecretpassword
_できます。
構成ファイルを使用するこの方法の利点は、スクリプトとの同期を維持するために個別の構成ファイルを必要としないことです。維持する必要があるのはスクリプトのみです。
この方法には欠点はありません。
パスワードは、システム上の他のユーザーには見えません(コマンドラインにあると表示されます)。環境変数は、mysqlコマンドを実行しているユーザーとrootにのみ表示されます。
パスワードは、スクリプト自体を読み取ることができるすべてのユーザーにも表示されるため、スクリプト自体が保護されていることを確認してください。これは、構成ファイルを保護することとまったく同じです。スクリプトをパブリックに読み取り可能にする場合は、別のファイルからパスワードを入手できます(たとえば、export MYSQL_PWD=$(cat /root/mysql_password)
)。構成ファイルを作成するよりも、変数をエクスポートする方が簡単です。
例えば。、
_$ export MYSQL_PWD=xoF3mafn5Batxasdfuo
$ mysqldump -u root mysql | head
-- MySQL dump 10.13 Distrib 5.6.23, for Linux (x86_64)
--
-- Host: localhost Database: mysql
-- ------------------------------------------------------
-- Server version 5.6.23
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
_
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
パスの書き方を忘れないでください。
--defaults-extra-file =は良いことです(tm)(c)