MySQLサーバーへのリモートアクセス許可をユーザーに付与する方法は?


118

SHOW GRANTS私のmysqlデータベースで行うと、

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' 
    IDENTIFIED BY PASSWORD 'some_characters' 
    WITH GRANT OPTION

私が間違っていない場合root@localhost、ユーザーrootはからのみサーバーにアクセスできることを意味しますlocalhostroot(同じネットワーク内の)他のすべてのマシンからもこのmysqlサーバーにアクセスする権限を付与するようにMySQLに指示するにはどうすればよいですか?


6
への簡単な変更によりlocalhost%パブリックネットワークへのルートアクセスが許可されます。忘れないでくださいflush privileges;

6
root @%を追加すると、多くのリスクにさらされるため、実行しないでください。私はこれが古い記事であることを知っていますが、その警告はここにあるはずです。rootアカウントは攻撃者が標的とする最初のアカウントであり、root @ '%'はrootユーザーが好きな場所からMySQLアカウントに接続できることを意味します。コメントでカバーするには多すぎますが、できるだけ多くのusers @ '%'を削除するようにしてください。そのときに宣言されているものは、非常に限定された権限を持つ必要があります。何があっても、絶対にroot @ '%'を追加してはいけません。また、アプリケーションはそのアカウントが存在することを期待すべきではありません。
デイモン


こんにちは、このコマンドのパスワード文字列を削除する必要があります...それはエラーを引き起こしています... IDENTIFIED BYで終了してから、パスワード自体で終了します。
マリオデサベラ

回答:


143

これにより、の任意のマシンから同じパスワードでrootアクセスが許可されます*.example.com

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%.example.com' 
    IDENTIFIED BY 'some_characters' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;

名前解決が機能しない場合は、IPまたはサブネットによるアクセスを許可することもできます。

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

MySQL GRANT構文ドキュメント。


15
...TO 'root'@'%' IDENTIFIED...どこからでもアクセスを許可すると思いますか?
Aufwind 2011年

3
私はmysqlでコマンドを実行しましたが、SHOW GRANTSそれでも同じです(私の質問と同様)。私もしましたFLUSH PRIVILGES。見逃しているものはありますか?
Aufwind 2011年

@Aufwind以外に必要なものはありませんFLUSH PRIVILEGES。ログアウトして再度ログインし、アクセス権がある場合はmysqldサービスを再起動します。また、skip networking回線が有効になってmy.cnfいないことを確認してください。ただし、これはSHOW GRANTSまだ同じではないことを説明していません。
Michael Berkowski、2011年

@Aufwind失敗した場合は、代わりにServerFault.comに問い合わせる必要があります。
Michael Berkowski、2011年

10
IDENTIFIED BY PASSWORDハッシュされた41桁の16進数が付随することに注意してください。IDENTIFIED BY 'password'パスワードを直接含めたい場合に使用します。
Rainulf 2013年

94

試してください:

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

1
うーん何がPa55w0rdばかげているようだ、それはあなたが作りたいパスワードだと私に言わないでください。あなたのmysqlにログインしようとするすべての人のために?
SSpoke、2014

23
これは、「読み取り専用のパスワードをこの場所に置く」と言って、パスワードにプレースホルダーを与えるためによく使用されます。
moshe beeri 2014

2
このコマンドは、セキュリティが問題にならないアプリケーション(devやQAなど)にのみ使用したいという通常の注意事項が含まれています。
2014

Macで機能しない場合は、「root」@「%」を「root」@「localhost」または/ etc / hostsで、権限を付与するコンピュータの名前に変更してください。
moshe beeri 2015

2
これを実行することを忘れないでください:FLUSH PRIVILEGES;
dane

44

最初にmysql、次にrootユーザーが外部からアクセスできることを確認するためにいくつかの手順を実行する必要があります。

  1. 無効化skip-networkingmy.cnf(すなわち:/etc/mysql/my.cnf

  2. bind-addressinの値を確認します。にmy.cnf設定されている127.0.0.1場合は0.0.0.0、すべてのIPまたは接続元のIPからのアクセスを許可するように変更できます。

  3. 任意のIPからrootユーザーにリモートアクセスを許可します(またはの代わりにIPを指定します%

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'
        IDENTIFIED BY 'your_root_password'
        WITH GRANT OPTION;
    FLUSH PRIVILEGES;`
  4. mysqlサービスを再起動します。

    sudo service mysql restart

また、ファイアウォールからmysqlポート3306を開く必要があります。そうしないと、リモートクライアントが接続しません
David Okwii

@Khashayarからのポイント2に関する簡単な通知:0.0.0.0は任意のIPv4アドレスを意味します。*は、IPv4またはIPv6のいずれかのアドレスを意味します。
Gustavo Pinsard

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

*.* = DB.TABLE ユーザーを特定のデータベースと特定のテーブルに制限できます。

'root'@'%'rootは、作成した任意のユーザーで変更でき、%はすべてのIPを許可します。%.168.1.1などを変更することでも制限できます。


それが解決しない場合は、my.cnfまたはmy.iniも変更して、これらの行にコメントを付けます。

bind-address = 127.0.0.1#bind-address = 127.0.0.1

skip-networking#skip-networking

  • MySQLを再起動し、上記の手順をもう一度繰り返します。

ラズベリーパイ、私はバインドアドレス設定を見つけました \etc\mysql\mariadb.conf.d\50-server.cnf


2
*.*and 'user'@'address'部分を説明する答えのみ。ありがとう!:)
フィリップ

にALLを付与しています。ハッカーを誘う。
リック・ジェームス

それが私が説明した理由です*。*
Wasim A.

8

他のSQLが共有しているSQL許可は機能します。それでもデータベースにアクセスできない場合は、ポートに対するファイアウォールの制限がある可能性があります。接続を開く方法は、サーバーの種類(およびその間のルーター)によって異なります。TCPポート3306の受信を開き、外部マシン(all / subnet / single IP / etc。)に同様のアクセスルールを与えます。


4

/etc/mysql/mysql.conf.d/mysqld.cnfファイルを開き、次の行をコメント化します。

#bind-address = 127.0.0.1

Ubuntuの19.4に取り組ん
NGO VANタオ

3

私の場合、私はセントOS上のリモートmysqlサーバーに接続しようとしていました。多くの解決策(すべての特権の付与、IPバインディングの削除、ネットワークの有効化)を行った後も、問題は解決されませんでした。

結局のところ、さまざまなソリューションを検討していると、iptablesに出くわしました。その結果、mysqlポート3306が接続を受け入れていないことに気付きました。

ここでは、この問題を確認して解決した方法について簡単に説明します。

  • ポートが接続を受け入れているかどうかの確認:
telnet(mysql server ip)[portNo]

-ポートでの接続を許可するIPテーブルルールの追加:

iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

-本番環境ではこれを推奨しませんが、iptablesが適切に構成されていない場合は、ルールを追加しても問題が解決しない可能性があります。その場合、以下を実行する必要があります。

サービスiptables停止

お役に立てれば。


3

2つのステップ:

  1. ワイルドカードを使用してユーザーを設定します。
    create user 'root'@'%' identified by 'some_characters'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD 'some_characters' WITH GRANT OPTION

  2. vim /etc/my.cnf
    以下を追加します。
    bind-address=0.0.0.0

サーバーを再起動します。サーバーへの接続に問題はありません。


続いて、「エラー1827(HY000):パスワードハッシュの形式が正しくありません。PASSWORD()関数で正しいパスワードアルゴリズムが使用されているかどうかを確認してください。」ここで私が何が間違っているのか説明してもらえますか?
lampShadesDrifter

2

mysql 8以降のバージョンでは、権限を付与してユーザーを追加することはできません。それはこのクエリで意味します:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' 
    IDENTIFIED BY 'type-root-password-here' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;

mysqlはこのエラーを返します。

エラー1064(42000):SQL構文にエラーがあります。MySQLサーバーのバージョンに対応するマニュアルで、1行目の「IDENTIFIED BY '書き込まれたパスワード」の近くで使用する正しい構文を確認してください

これは、%ドメインのrootユーザーがいないことを意味します。したがって、最初にユーザーを挿入してから、次のような権限を付与する必要があります。

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'your password';
Query OK, 0 rows affected (0.11 sec)

mysql> GRANT ALL ON *.* TO 'root'@'%';
Query OK, 0 rows affected (0.15 sec)

mysql> FLUSH PRIVILEGES;

パスワードを特定のパスワードに置き換えることを忘れないでください。


0

これでうまくいきました。しかし、私が最初に試してみたが、それが影響を及ぼさないという奇妙な問題がありました。私はphpmyadminページを更新して、なんとか機能させました。

local-xampp-mysqlへのアクセスが必要な場合。xampp-shell->コマンドプロンプトを開くことができます。

次に、mysql -uroot -p --port = 3306またはmysql -uroot -p(パスワードが設定されている場合)。その後、mysqlシェルページからこれらのアクセス権を付与できます(localhost / phpmyadminからも機能します)。

誰かがこのトピックを見つけて初心者の問題がある場合は、これらを追加してください。


0

Ubuntu 18.04

mysqldをインストールして実行します。

データベースに移動し、rootユーザーを設定します。

sudo mysql -u root
SELECT User,Host FROM mysql.user;
DROP USER 'root'@'localhost';
CREATE USER 'root'@'%' IDENTIFIED BY 'obamathelongleggedmacdaddy';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;

mysqld権限を編集して再起動します。

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

# edit the line to be this:
bind-address=0.0.0.0

sudo systemctl stop mysql
sudo systemctl start mysql

別のマシンから、test .. mysqldマシンのObvsポート(3306)は、テストマシンからの接続を許可する必要があります。

mysql -u root -p -h 123.456.789.666

MySqlのすべての追加の「セキュリティ」はセキュリティをまったく助けません。複雑にして難読化するだけで、本当に長いパスワードを使用していた昔よりも、それを台無しにするのが実際に簡単になりました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.