76

以前は SQL Server を使用していましたが、現在はプロジェクトに MySQL を使用しています。SQL Server を使用すると、開発者は、ホスト、ユーザー名、パスワードを知っていれば、ローカル マシン上のリモート データベースに接続できます。ただし、MySQL では、開発者がローカル マシンからアクセスできるようにするために、MySQL にログインして次のコマンドを実行する必要がありました。

GRANT ALL ON *.* to user@address IDENTIFIED BY 'password'; 
flush privileges;

address開発者のマシンの IP アドレスはどこにありますか。もちろん、彼らがネットワークを変更した場合は、もう一度実行する必要があります。SQL Server で経験したようにすべてのリモート接続を許可する方法はありますか、それとも何らかの理由でこれは悪い考えですか? ユーザー名とパスワードはまだあります。明らかに少し混乱しています。

また、これは開発データベースであり、内部ネットワークからのみアクセスできます。すべての人に本番データベースへのアクセス権を与えることがなぜ悪い考えなのか、私は理解しています。

4

7 に答える 7

174

上記のライアンが指摘したように、必要なコマンドは

GRANT ALL ON *.* to user@'%' IDENTIFIED BY 'password'; 

ただし、ドキュメントには、これを機能させるlocalhostには、同じユーザーに対して別のユーザー アカウントを作成する必要があることが示されていることに注意してください。それ以外の場合は、より具体的なホスト列があるため、によって自動的に作成された匿名アカウントmysql_install_dbが優先されます。

言い換えると; ユーザーuserが任意のサーバーから接続できるようにするため。次のように 2 つのアカウントを作成する必要があります。

GRANT ALL ON *.* to user@localhost IDENTIFIED BY 'password'; 
GRANT ALL ON *.* to user@'%' IDENTIFIED BY 'password'; 

ここで完全なドキュメントを読んでください。

そして、ここに参考のための関連部分があります:

root としてサーバーに接続した後、新しいアカウントを追加できます。次のステートメントは、GRANT を使用して 4 つの新しいアカウントを設定します。

mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
    ->     WITH GRANT OPTION;
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
    ->     WITH GRANT OPTION;
mysql> CREATE USER 'admin'@'localhost';
mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';
mysql> CREATE USER 'dummy'@'localhost';

これらのステートメントによって作成されたアカウントには、次のプロパティがあります。

2 つのアカウントのユーザー名は monty で、パスワードは some_pass です。どちらのアカウントも、何でもできる完全な権限を持つスーパーユーザー アカウントです。'monty'@'localhost' アカウントは、ローカル ホストから接続する場合にのみ使用できます。'monty'@'%' アカウントは、ホスト部分に '%' ワイルドカードを使用するため、任意のホストからの接続に使用できます。

monty としてどこからでも接続できるようにするには、 monty の両方のアカウントが必要です。localhost アカウントがない場合、monty がローカル ホストから接続するときに、mysql_install_db によって作成される localhost の匿名ユーザー アカウントが優先されます。その結果、monty は匿名ユーザーとして扱われます。この理由は、匿名ユーザー アカウントが 'monty'@'%' アカウントよりも具体的な Host 列の値を持っているため、ユーザー テーブルの並べ替え順で先に来るためです。(ユーザーテーブルの並べ替えについては、セクション6.2.4「アクセス制御、ステージ 1: 接続の検証」で説明しています。)

于 2012-04-19T20:27:13.883 に答える
26

/etc/my.cnf を編集して、すべてのセキュリティを無効にすることができます。

[mysqld]
skip-grant-tables
于 2013-10-01T12:25:02.933 に答える
15
GRANT ALL ON *.* to user@'%' IDENTIFIED BY 'password'; 

特定のユーザーがどこからでもログオンできるようにします。

アカウントが危険にさらされた場合など、一部のセキュリティ制御が削除されるため、これは悪いことです。

于 2012-04-19T20:15:11.463 に答える
2

また、構成ファイルで以下の行を無効にする必要があります: bind-address = 127.0.0.1

于 2015-04-22T14:06:33.867 に答える
1
mysql> CREATE USER 'monty'@'192.168.%.%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'192.168.%.%'
于 2015-12-02T10:20:33.840 に答える