2012-04-19 11 views
47

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

addressは、開発者のマシンのIPアドレスである
GRANT ALL ON *.* to [email protected] IDENTIFIED BY 'password'; 
flush privileges; 

。もちろん、彼らがネットワークを変えたら、私はそれをもう一度実行しなければならない。 SQL Serverで経験したようなすべてのリモート接続を許可する方法はありますか、何らかの理由でこれが悪い考えですか?私たちはまだユーザー名とパスワードを持っています。私は明らかに少し混乱しています。

また、これは開発データベースであり、私たちの内部ネットワークからのみアクセス可能です。誰もが本番データベースにアクセスできるようにすることが悪い考えだと私は理解しています。

+0

こんにちは。私は同じ問題があり、すべてのコマンドを提案したが、私はリモートアクセスにアクセスすることはできません。私を助けてください。 –

答えて

114

としては、あなたが必要とするコマンドは、ドキュメントがこれが機能するためには、localhostから別のユーザーアカウントが同じユーザーのために作成しなければならないことを示していることに注意してください、しかし

GRANT ALL ON *.* to [email protected]'%' IDENTIFIED BY 'password'; 

である上記ライアンが指摘しました;それ以外の場合は、より具体的なホスト列があるため、自動的にmysql_install_dbで作成された匿名アカウントが優先されます。

つまり、ユーザーuserが任意のサーバーから接続できるようにするには

GRANT ALL ON *.* to [email protected] IDENTIFIED BY 'password'; 
GRANT ALL ON *.* to [email protected]'%' IDENTIFIED BY 'password'; 

here.

そして、ここでは参照に関連する作品だ完全なマニュアルを読む:次のように2つのアカウントを作成する必要があるルートとしてサーバに接続した後

、あなたが追加することができます新しいアカウント。 次の文は、4つの新しいアカウントを設定するためにGRANTを使用します。

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つはモンティのユーザー名を持っていますパスワードは some_passです。両方のアカウントは、完全な権限を持つスーパーユーザーアカウントです 何かを行うには。 'monty' @ 'localhost'アカウントは、ローカルホストから に接続している場合にのみ使用できます。 'monty' @ '%'アカウントはホスト部分に '%' ワイルドカードを使用するため、 ホストからの接続に使用できます。

モンティはモンティとしてどこからでも を接続できるようにするために、両方のアカウントを持っていることが必要です。localhostアカウントがない場合、 ローカルホストからmontyを接続すると、 mysql_install_dbによって作成されたlocalhostの匿名ユーザーアカウント が優先されます。その結果、montyは匿名ユーザーとして扱われます。 これは、匿名ユーザーアカウントが 'monty' @ '%'アカウントよりも の特定のホスト列値を持っているため、ユーザーテーブルの並べ替え順に先に となります。 (userテーブルのソートは、6.2.4項で を議論している、「アクセス制御の段階1:接続確認」。)

私はこれを誤解していない限り、私には愚かなようだ

+0

完全に働いた。ありがとう! –

10
GRANT ALL ON *.* to [email protected]'%' IDENTIFIED BY 'password'; 

特定のユーザーがどこからでもログオンできるようになります。

アカウントが侵害された場合など、セキュリティコントロールが削除されるため、悪いことです。

+2

私はあなたも受け入れることができれば幸いです。ありがとう! –

+2

私が変更を加えなければならなかったことは、TCPバインドインターフェイスでした。私はクラウドでホストされているmysqlインスタンスに接続しなければならなかったので、/etc/mysql/my.cnfの "bind-address = 0.0.0.0"を変更しました。デフォルトは127.0.0.1です。mysqlはローカルループバックインターフェイスでのみリッスンし、外部ネットワークからのコール。 –

+0

私は、どのように接続するかを理解するのに苦労してきました。これらのソルーションは、最初の問題を解決するのに役立ちました。多くのおかげさまですが、私は別の問題にぶつかりました。 ポート番号を80から8080に変更しようとしました。現在、http:// servername:8080/mysiteを使用すると、すぐにhttp:// servername/mysiteに戻って404ファイルまたはディレクトリが見つかりませんエラー。どうすればポート8080で動作させることができますか? 偉大なもの – Kenny

18

あなたはな/etc/my.cnfを編集することで、すべてのセキュリティを無効にすることができます

[mysqld] 
skip-grant-tables 
+0

良い!ありがとう! :) – Adrian

+0

私はこれが好きです! – adbarads

2

はまた、あなたは、設定ファイルに線の下に無効にする必要があります。 バインドアドレスを= 127.0.0.1

1
mysql> CREATE USER 'monty'@'192.168.%.%' IDENTIFIED BY 'some_pass'; 
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'192.168.%.%' 
3

どこからでもリモートから接続するためのmysqlのインストールと設定

mysql_secure_installationで作業しないでください! (https://dev.mysql.com/doc/refman/5.5/en/mysql-secure-installation.html

Ubuntuの上で、使用してMySQLをインストールします。

sudo apt-get install mysql-server 

を使用してサーバからDBへの
[mysqld] 
#### Unix socket settings (making localhost work) 
user   = mysql 
pid-file  = /var/run/mysqld/mysqld.pid 
socket   = /var/run/mysqld/mysqld.sock 

#### TCP Socket settings (making all remote logins work) 
port   = 3306 
bind-address = 0.0.0.0 

/etc/mysql/my.cnfログインしてすぐ下に持っています

mysql -u root -p

以下の文を使用してDBユーザーを作成してください。

grant all privileges on *.* to ‘username’@‘%’ identified by ‘password’; 

オープンファイアウォール:

sudo ufw allow 3306 

再起動mysqlの

​​
+0

もしあれば '' *。*に対するすべての特権を 'username' @ '%'が 'password'; '...に指定したものに許可するしかしとにかく動作しません –

+0

sudo ufw allow 3306 これは私にとって魔法でした:) –

+0

ほとんどの完全な答え、ありがとう! –