web-dev-qa-db-ja.com

rootパスワードなしでコマンドラインからMySQLに接続します

一部のタスク用の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でも同じようにする必要があります。

11
ReynierPM

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より高い権限を持つファイルの使用を拒否します。

23
kworr
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 

これはトリックを行いますありがとう

2
mysql_config_editor set --login-path=storedPasswordKey --Host=localhost --user=root --password

安全なパスワードを使用してコマンドラインを実行するにはどうすればよいですか?設定エディタを使用してください!!!

Mysql 5.6.6以降では、パスワードを設定ファイルに保存して、次のようなcliコマンドを実行できます。

mysql --login-path=storedPasswordKey ....

--login-pathは変数を置き換えます...ホスト、ユーザー、およびパスワード。すばらしい!

2
Artistan

パスワードを引用符で囲まないでください。引用符はパスワードの一部と見なされます。

1
John Gardeniers

同様の質問 が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 */;
_
1
chutz
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)

1
GioMac