web-dev-qa-db-ja.com

任意のIPアドレスからMySQLデータベースへのリモートアクセスを許可する

私はこのコマンドを知っています:

GRANT ALL PRIVILEGES
ON database.*
TO 'user'@'yourremotehost'
IDENTIFIED BY 'newpassword';

しかしそれから、このリモートMySQLデータベースにアクセスするために特定のIPアドレスを許可することしかできません。任意のリモートホストがこのMySQLデータベースにアクセスできるようにしたい場合はどうしますか?それ、どうやったら出来るの?基本的に私はこのデータベースを公開して誰でもアクセスできるようにしています。

244
adit
TO 'user'@'%'

%はワイルドカードです - 必要に応じて'%.domain.com''%.123.123.123'を実行することもできます。

238
Ariel

リモートアクセスを有効にする(Grant)ホーム/チュートリアル/ MySQL /リモートアクセスを有効にする(Grant)リモートマシンからmysqlサーバーに接続しようとして、以下のようなエラーが発生した場合は、この記事を読んでください。

エラー1130(HY000):ホスト「1.2.3.4」はこのMySQLサーバーに接続できません

MySQLの設定を変更する

Mysql設定ファイルの編集から始めます

vim /etc/mysql/my.cnf

以下の行をコメントアウトしてください。

#bind-address           = 127.0.0.1
#skip-networking

スキップネットワーキングの行が見つからない場合は、それを追加してコメントアウトします。

MySQLサーバーを再起動します。

~ /etc/init.d/mysql restart

GRANT特権を変更する

上記の変更の後でも、リモートアクセスやアクセスを取得しているわけではありませんが、すべてのデータベースにアクセスできるわけではないことに驚かれるかもしれません。

デフォルトでは、使用しているmysqlのユーザー名とパスワードはローカルでmysql-serverにアクセスすることを許可されています。だから特権を更新する必要があります。

すべてのマシンからアクセスするには、以下のようなコマンドを実行してください。 (USERNAMEPASSWORDを自分の資格情報に置き換えます。)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

特定のIPからアクセスするには、以下のようにコマンドを実行します。 (USERNAMEPASSWORDを自分の資格情報に置き換えます。)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'1.2.3.4' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

あなたはあなたのIPと1.2.3.4を置き換えることができます。上記のコマンドを何度も実行して、複数のIPからのアクセスを許可することができます。

リモートアクセス用にUSERNAMEPASSWORDを別々に指定することもできます。

あなたは最終結果をチェックすることができます:

SELECT * from information_schema.user_privileges where grantee like "'USERNAME'%";

最後に、実行する必要があるかもしれません:

mysql> FLUSH PRIVILEGES;

接続テスト

端末/コマンドラインから:

mysql -h Host -u USERNAME -pPASSWORD

MySQLシェルを入手した場合は、show databasesを実行することを忘れないでください。あなたがリモートマシンから正しい権限を持っているかどうかを確認する。

ボーナスヒント:アクセスを取り消す

誤ってユーザーにアクセス権を付与した場合は、取り消しオプションを使用すると便利です。

以下は、すべてのマシンからUSERNAMEのすべてのオプションを取り消します。

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'%';
Following will revoke all options for USERNAME from particular IP:

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'1.2.3.4';
Its better to check information_schema.user_privileges table after running REVOKE command.

REVOKEコマンドを実行した後にUSAGE特権が表示されても、問題ありません。まったく特権がないのと同じくらい良いです。無効にできるかどうかはわかりません。

145

上記のステップが完了し、MySqlポート3306がリモートから自由にアクセスできると仮定します。 mysql設定ファイルでパブリックIPアドレスをバインドすることを忘れないでください。

例えば私のUbuntuサーバーでは:

#nano /etc/mysql/my.cnf

ファイル内で [mysqld] セクションブロックを検索し、新しいバインドアドレスを追加します。この例では192.168.0.116です。それはこのようになります

......    
.....    
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.

bind-address        = 127.0.0.1    
bind-address        = 192.168.0.116

.....    
......

選択した場合はlocalhost(127.0.0.1)バインディングを削除できますが、その場合はローカルマシン上のサーバーにアクセスするためのIPアドレスを明確に指定する必要があります。

それから、最後のステップはMySqlサーバーを再起動することです(ubuntu上)。

stop mysql

start mysql

他のシステムの場合は#/etc/init.d/mysql restart

これでMySQLデータベースにリモートからアクセスすることができます。

mysql -u username -h 192.168.0.116 -p
37
Waqas

これに遭遇した人のために、これが私が特権を付与するようになった方法です。

GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY
'yourRootPassword';

前述のように%はワイルドカードであり、これはどんなIPアドレスでもあなたのデータベースに接続することを可能にします。私がここで行う仮定は、あなたが接続するとき、あなたはrootという名前のユーザを持つことになるということです(ただしこれがデフォルトです)。 rootのパスワードを入力してください。ユーザーrootの前後に単一引用符(')がないことに注意してください。

24
Dev

設定ファイルの変更は、localhostを介した接続を有効にするために必要です。

リモートIPを介して接続するには、 "root"ユーザーとしてログインし、mysqlで以下のクエリを実行します。

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

CREATE USER 'username'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

これにより、ローカルIP上およびリモートIP上からアクセス可能な新しいユーザーが作成されます。

/etc/mysql/my.cnfにあるmy.cnfファイルからの以下の行もコメントしてください。

bind-address = 127.0.0.1

使用してMySQLを再起動します。

Sudo service mysql restart

これであなたはあなたのmysqlにリモートで接続できるはずです。

20
harishannam

このコマンドを使います。

GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY 'yourRootPassword';

その後:

FLUSH PRIVILEGES; 

次に、ファイル "/etc/mysql/mysql.conf.d/mysqld.cnf"の下の行をコメントアウトします(必須です)。

bind-address = 127.0.0.1 

私のために働く!

18

以下を実行してください。

$ mysql -u root -p      
mysql> GRANT ALL ON *.* to root@'ipaddress' IDENTIFIED BY 'mysql root password';     
mysql> FLUSH PRIVILEGES;     
mysql> exit

次に、指定したIPアドレスから接続を試みます。

mysql -h address-of-remove-server -u root -p   

接続できるはずです。

16
akhil.o.v

このコマンドでMariaDBの問題を解決できます

注意:

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

%はワイルドカードです。この場合、それはすべてのIPアドレスを指します。

GRANT ALL PRIVILEGES ON *.* TO 'user'@'ipadress'
8
user3846464

ファイルを編集:

/etc/mysql/percona-server.cnf

以下のコードをファイルに追加してください。

[mysqld] bind-address = 0.0.0.0

リモートアクセス用のユーザーを作成します。

$ mysql -u root -p      
mysql> GRANT ALL ON *.* to snippetbucketdotcom@'%' IDENTIFIED BY 'tejastank';   
mysql> FLUSH PRIVILEGES;    
mysql> exit

すべてのLinuxサーバーが動作します。

MSWin cの場合:\インストール場所\ファイルのパスを検索

4
Tejas Tank
  • 管理ユーザーを使用してMYSQLを起動します。
    • mysql -u admin-user -p(プロンプトでパスワードを入力してください)
  • 新しいユーザーを作成します。
    • CREATE USER 'newuser' @ '%' ID 'BY' password '; (% - > anyhost)
  • 特権の付与:
    • SELECT、DELETE、INSERT、およびdb_name。に対する更新を付与します。* 'newuser' @ '%'に。
    • フラッシュ特権;

EC2インスタンスを実行している場合は、MYSQL/Aururaのセキュリティグループにインバウンドルールを追加することを忘れないでください。

3
Rifaideen

データベースMysqlサーバー8にリモートアクセスするには

CREATE USER 'root'@'%' IDENTIFIED BY 'Pswword@123';

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;
3
Anil Rana

mysql consoleを開き、次のコマンドを実行します(データベース名、ユーザー名、パスワードを入力してください)。

'yourRootPassword'で識別されるadmin @ '%'にすべてを付与します。

次に実行します。

フラッシュ特権;

コマンドラインを開き、/etc/mysql/mysql.conf.d/mysqld.cnfを含む任意のエディタを使用してファイルroot privilegesを開きます。

例えば:

Sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

そして、以下の行をコメントアウトしてください。

bind-address = 127.0.0.1

コマンドを使用して変更を反映するためにmysqlを再起動します。

Sudo service mysql restart

楽しい ;)

2
Usman Yousaf

以下のようなデータベースにユーザーを作成するだけです。

GRANT ALL PRIVILEGES ON <database_name>.* TO '<username>'@'%' IDENTIFIED BY '<password>'

それから

Sudo nano /etc/mysql/mysql.conf.d/mysqld.cnfをクリックし、行bind-address = 127.0.0.1bind-address = 0.0.0.0に変更します。

その後は、どのIPからでもそのデータベースに接続できます。

2
Diogo Mendes

Mysql設定ファイルを変更する必要があります。

mysql設定ファイルの編集から始めます

vim /etc/mysql/my.cnf

追加:

bind-address = 0.0.0.0
1
bhushan pardhi

どのIPアドレスからでもユーザーと接続できるようにするには、次の手順に従います。

MySQLサーバーがリモート接続を受け付けるようにします。このmysqld.confファイルを開きます。

Sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf

"bind-address"で始まる行を検索し、その値を0.0.0.0に設定します。

bind-address                    = 0.0.0.0

そして最後にファイルを保存します。

systemdを使用するか、または古いserviceコマンドを使用して、mysqlサーバーを再起動します。

Sudo systemctl restart mysqld.service

最後に、mysqlサーバーはリモート接続を受け付けることができます。

今度はユーザーを作成し、それに権限を付与する必要があります。そうすれば、このユーザーでリモートからログインできるようになります。

Rootとして、またはroot権限を持つ他のユーザーとしてMySQLデータベースに接続します。

mysql -u root -p

これで、localhostと '%'ワイルドカードの両方に目的のユーザーを作成し、それ自体としてすべてのDBに対する権限を付与します。

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;

お役に立てれば ;)

例えば私のCentOSで

Sudo gedit /etc/mysql/my.cnf

次の行をコメントアウトする

#bind-address = 127.0.0.1

それから

Sudo service mysqld restart

0
zawhtut

ubuntuでうまくいったのは、すべての特権をユーザーに付与することです。

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;

バインドアドレスを/etc/mysql/mysql.conf.d/mysqld.cnfに設定します。

bind-address            = 0.0.0.0

その後、mysqlデーモンを再起動します。

service mysql restart
0
Miguel Mota

任意のIPアドレスからデータベースへのリモートアクセスを許可したい場合は、mysqlコマンドを実行してから次のコマンドを実行します。

GRANT ALL PRIVILEGES ON *.*
TO 'root'@'%' 
IDENTIFIED BY 'password' 
WITH GRANT OPTION;
0
Atul6.Singh

CPanelのようなWebサイトパネルでは、許可されたホスト名に単一の%(パーセント記号)を追加してMySQLデータベースにアクセスすることができます。

単一の%を追加することで、デスクトップアプリケーションからでさえも、任意のIPまたはWebサイトからデータベースにアクセスできます。

0
Muhammad Saqib