1. ホーム
  2. mysql

すべてのリモート接続を許可する、MySQL

2023-10-25 07:18:02

質問

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

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

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

また、これは開発データベースであり、内部ネットワークからのみアクセス可能です。本番用データベースへのアクセスを全員に許可することが悪い考えであることは理解しています。

どのように解決するのですか?

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

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は匿名ユーザーとして扱われます。 この理由は、anonymous-userアカウントは'monty'カラムよりも具体的な hostカラムの値が'monty'@'%'アカウントよりも具体的であるため、ユーザーテーブルのソート順が先になるからです。 そのため、ユーザーテーブルのソート順が早くなるからです。(ユーザーテーブルのソートについては アクセス制御、ステージ1: 接続検証」 で説明されています)。