MySQLはリモートアクセス用のユーザーを追加しています


148

でユーザーを作成user@'%'しましたpassword 'password。しかし、私は接続できません:

mysql_connect('localhost:3306', 'user', 'password');

ユーザーを作成したところuser@'localhost'、接続できました。どうして?「%」はどのホストからのものでもないのですか?


user @ localhostとuser @%のパスワードは一般的に異なり、特権も異なることに注意してください。
ホセマヌエルゴメスアルバレス

回答:


377

リモートで接続するには、MySQLバインドポート3306をmy.cnfのマシンのIPアドレスに接続する必要があります。次に、localhostと '%'の両方のワイルドカードでユーザーを作成し、すべてのDBにアクセス権を付与する必要があります下記参照:

my.cnf(Windowsのmy.ini)

#Replace xxx with your IP Address 
bind-address        = xxx.xxx.xxx.xxx

その後

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';

その後

GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';
flush privileges;

OSによっては、リモート接続を許可するためにポート3306を開く必要がある場合があります。


1
これは、WebFactionプライベートMySQLインスタンスの使用に役立ちました。私はあなたのCREATE USERとGRANT ALLの手順に従いmysql.default_port = <private instance port>、php.iniで設定し127.0.0.1、dbホスト名に使用しました
spex

非常に便利。ただのコメント。my.cnfに別の構成ファイルが含まれている可能性があるため、関連する行が別の場所にある可能性があります。my.cnfで、!includeで始まる行を探します。bind-addressがmy.cnfにない場合、そのインクルードファイルにある可能性があります。
tru7

my.cnfファイルはどこにありますか?
Vladimir Despotovic 2017年

7
FLUSH PRIVILEGESを忘れないでください;)
volkovmqx

4
なぜlocalhostと%の両方ですか?

21

手順に従ってください(手順1〜3はWindowsでは不要です):

  1. 編集するmysql設定を見つけます。

    /etc/mysql/my.cnf(Mysql 5.5)

    /etc/mysql/conf.d/mysql.cnf(Mysql 5.6以降)

  2. 構成bind-address=127.0.0.1ファイルの変更を検索しますbind-address=0.0.0.0(バインドアドレスをインターフェイスIPの1つに設定するか、私のように0.0.0.0を使用できます)

  3. コンソールで実行されているmysqlサービスを再起動します。 service restart mysql

  4. リモート接続用の安全なパスワードを持つユーザーを作成します。これを行うには、mysqlで次のコマンドを実行します(mysqlコンソール実行に到達するLinuxユーザーのmysql場合、およびroot runのパスワードを設定した場合mysql -p):

    GRANT ALL PRIVILEGES 
     ON *.* TO 'remote'@'%' 
     IDENTIFIED BY 'safe_password' 
     WITH GRANT OPTION;`

これで、名前userとパスワードがsafe_passwordあり、リモート接続が可能なユーザーが作成されました。


2
bind-address = 0.0.0.0 ...を変更してください。と権限を付与
zwitterion

12

ユーザーはどのDBですか?この例を見て

mysql> create database databasename;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on databasename.* to cmsuser@localhost identified by 'password';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

質問に戻るには、「%」演算子はネットワーク内のすべてのコンピュータを意味します。

aspesaが示すように、ユーザーを作成または更新する必要があることも確信しています。すべてのmysqlユーザーを探します。

SELECT user,password,host FROM user;

ユーザーを設定するとすぐに、次のように接続できるはずです。

mysql -h localhost -u gmeier -p

それが役に立てば幸い


一般に、すべてのdbに対して。DBを選択するのではなく、接続したいだけです。codemysql_connect( 'localhost:3306'、 'user'、 'password'); code
user2333586 2013

Windows、LinuxのどのOSを使用していますか?
apesa 2013

ウィンドウズ。ワンプサーバー。
user2333586

IPアドレスがポート3306にバインドされていることを確認する必要があります。Windowsでは、netstat -nを使用して、IPにバインドされているポートを確認できます。127.0.0.1:3306が表示されている場合、localhost以外からは接続できません
apesa
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.