2016-09-08 10 views
0

私は自分のPHP開発環境を作成しています。私はmysqlを設定しています。mysql grantコマンドではどういう意味ですか?

GRANT ALL ON *.* TO 'root'@'%'; 

なぜそれが「ルート」@「%」を使用します。私が使用して

は、私は私のrootユーザーにすべての権限を付与する必要がありますか?

私はこれらがユーザーとホストであることを理解していますが、この場合は開発環境にあるためホストを置く必要がありますか?

プロダクションサーバーの場合は、指定したホストでホストされているデータベースのみを許可することになっていることを理解しています。

ありがとうございました。

答えて

1

'%'はワイルドカードのフォールバックです。ログイン試行は、最も具体的な試行を行い、認証する場合はユーザー/ホストのコンボアカウントが見つかるまで、ワイルドカード(より一般的な方へ)に移動します。このようなアカウントが見つからない場合、ログインは失敗します。

'root'@'localhost'(acctまたはuser 1と呼ぶ)を持っているときは、localhostに座っているときにそれはすべてうまいです。しかし、別のクライアントから接続すると、 '192.168.10.103'と言うと、もはや 'localhost'にはなりません。明示的な 'root'@'192.168.10.103'(あなたの場合は、ユーザまたはacct)か、ワイルドカードのスウィングを'%'で行う必要があります。なぜなら、すべての順列であなたのmysql.userを捨てる方法がないからです。あなたはルート

それらをすべて同じ権利を与える
'root'@'localhost' 
'root'@'127.0.0.1' 
'root'@'%' 

のための3人のユーザーを持つことは珍しいことではありません

select user,host from mysql.user; 

で見ることができてきたどのようなユーザー

。上記の3つ目はセキュリティリスクです。これは、 '%'は任意のホストからのを意味するためです。

それで、あなたのシステムで唯一のrootユーザーであることを 'root' @ 'localhost'がお勧めします。あなたは、そのボックスに座っているか、セキュアな接続でsshを使ってrootになり、localhostになります。

あなたはセキュリティに関するすべてであることを理解する必要があります。そして、より良いか悪いかに関わらず、MySQLはユーザーの実装を選択しました。ユーザはユーザ名で、ホスト名はで、となります。ホスト名には、IPアドレス、またはcasper.comcastbusiness.netのようなDNSホスト名を使用できます。 MySQLは接続要求を受け取ると、要求を認証できるかどうかを判断するまで、最も特定のものから '%'に向かってバブルアップします。

セキュリティ上の理由から、ではないのユーザーは、'root'@'%'というユーザーをrootとして認証する必要があります。だから私は明示的に'root'@'casper.comcastbusiness.net'のようなユーザーを作成しました。コースのもう1つの層はファイアウォールですが、それは別の問題です。しかし、軽く触れるために、AWS ec2には、特定のIPアドレスだけがポート3306に接続できるようにするセキュリティグループ領域があります。したがって、ファイアウォールは別の層です。サーバーを保護します。

それを管理することは苦労です。しかし、それは何であり、我々はそれと一緒に生きなければならない。

+0

ありがとうございました!わかっている。だから私は自分のlocalhostから自分のsqlに接続するので、 'root' @ '%'の許可を取り消して 'root' @ 'localhost'に与えるほうが正しいです。 :) – Maik

+0

はい。そして、ルート@% – Drew