私はこのコマンドを知っています:
GRANT ALL PRIVILEGES
ON database.*
TO 'user'@'yourremotehost'
IDENTIFIED BY 'newpassword';
しかしそれから、このリモートMySQLデータベースにアクセスするために特定のIPアドレスを許可することしかできません。任意のリモートホストがこのMySQLデータベースにアクセスできるようにしたい場合はどうしますか?それ、どうやったら出来るの?基本的に私はこのデータベースを公開して誰でもアクセスできるようにしています。
TO 'user'@'%'
%はワイルドカードです - 必要に応じて'%.domain.com'
や'%.123.123.123'
を実行することもできます。
リモートアクセスを有効にする(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にアクセスすることを許可されています。だから特権を更新する必要があります。
すべてのマシンからアクセスするには、以下のようなコマンドを実行してください。 (USERNAME
とPASSWORD
を自分の資格情報に置き換えます。)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
特定のIPからアクセスするには、以下のようにコマンドを実行します。 (USERNAME
とPASSWORD
を自分の資格情報に置き換えます。)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'1.2.3.4' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
あなたはあなたのIPと1.2.3.4を置き換えることができます。上記のコマンドを何度も実行して、複数のIPからのアクセスを許可することができます。
リモートアクセス用にUSERNAME
とPASSWORD
を別々に指定することもできます。
あなたは最終結果をチェックすることができます:
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特権が表示されても、問題ありません。まったく特権がないのと同じくらい良いです。無効にできるかどうかはわかりません。
上記のステップが完了し、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
これに遭遇した人のために、これが私が特権を付与するようになった方法です。
GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY
'yourRootPassword';
前述のように%
はワイルドカードであり、これはどんなIPアドレスでもあなたのデータベースに接続することを可能にします。私がここで行う仮定は、あなたが接続するとき、あなたはroot
という名前のユーザを持つことになるということです(ただしこれがデフォルトです)。 rootのパスワードを入力してください。ユーザーrootの前後に単一引用符('
)がないことに注意してください。
設定ファイルの変更は、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にリモートで接続できるはずです。
このコマンドを使います。
GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY 'yourRootPassword';
その後:
FLUSH PRIVILEGES;
次に、ファイル "/etc/mysql/mysql.conf.d/mysqld.cnf"の下の行をコメントアウトします(必須です)。
bind-address = 127.0.0.1
私のために働く!
以下を実行してください。
$ 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
接続できるはずです。
GRANT ALL ON *.* to root@'%' IDENTIFIED BY 'mysql root password';
%
はワイルドカードです。この場合、それはすべてのIPアドレスを指します。
GRANT ALL PRIVILEGES ON *.* TO 'user'@'ipadress'
/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
EC2インスタンスを実行している場合は、MYSQL/Aururaのセキュリティグループにインバウンドルールを追加することを忘れないでください。
データベースMysqlサーバー8にリモートアクセスするには
CREATE USER 'root'@'%' IDENTIFIED BY 'Pswword@123';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
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
楽しい ;)
以下のようなデータベースにユーザーを作成するだけです。
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.1
をbind-address = 0.0.0.0
に変更します。
その後は、どのIPからでもそのデータベースに接続できます。
Mysql設定ファイルを変更する必要があります。
mysql設定ファイルの編集から始めます
vim /etc/mysql/my.cnf
追加:
bind-address = 0.0.0.0
どの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
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
任意のIPアドレスからデータベースへのリモートアクセスを許可したい場合は、mysqlコマンドを実行してから次のコマンドを実行します。
GRANT ALL PRIVILEGES ON *.*
TO 'root'@'%'
IDENTIFIED BY 'password'
WITH GRANT OPTION;
CPanelのようなWebサイトパネルでは、許可されたホスト名に単一の%
(パーセント記号)を追加してMySQLデータベースにアクセスすることができます。
単一の%
を追加することで、デスクトップアプリケーションからでさえも、任意のIPまたはWebサイトからデータベースにアクセスできます。