MySql ユーザー権限設定



2.MySQLのユーザー権限設定が変更されていない

次も初歩的な問題ですが、知らないとわかりません。これを解決するのに私は何時間も迷いました…。ユーザー権限の問題です。データベースのデータに関してアクセス制限できるのは知っていましたが、ログインに関しても細かく指定できるとは知りませんでした。

初期設定では、rootはローカルホストからしか接続できないようになっています。つまり、ほかのマシンからrootでログインしようと思っても、接続できないようにブロックされます。まぁ、最初から必ずあるrootには初期段階でパスワードが設定されていないわけですから、これくらの制限はないと、とんでもないことになりそうですが。

この際、同じネットワークからならリモートで何でもできる新しいスーパーユーザーを登録してみましょう。ただしこれには多少の危険が伴います。もし悪意ある人が接続できてしまった場合、MySQL内のデータを盗み放題、破壊し放題なわけです。一応同じネットワーク内に限定するので、そう簡単にインターネットからアクセスされていたずらされるということはないと思いますが。また、ここではわかりやすいように、ユーザー名を[admin]パスワードを[pass]としますが、実際にやる場合は、特に運用前には、念のため、ユーザー名とパスワードはできるだけ推測しにくい ものにしてください。

ではさっそく新しいユーザーを登録してみましょう。adminというユーザーをpassというパスワードで、同じローカルネットワークからしかつながらないが、何でもできる、という条件で登録します。もう一つ条件として、MySQLサーバーのローカルネットワークのIPアドレスが、192.168.0.なんとか…としましょう。つまり、このローカルネットワークのアドレスの範囲が192.168.0.1~192.168.0.254で、この間にあるIPからしかアクセスできなくする、という設定です。MySQLにrootでログインし、次のように打ち込んでみてください。

grant all on *.* to admin@"192.168.0.%" identified by 'pass' with grant option;
すこしだけgrantコマンドを説明します。

grantのすぐ後の all は、許可する操作を表しています。もし検索だけを許可して、そのほかの操作すべて(データの消去も挿入も項目の追加も…)を許さない場合は、allの部分がselectになります。ここでは、すべてを許可したいので、[all]としています。

つぎの *.* ですが、これは権限を与えるテーブル名とデーターベース名です。*はワイルドカードで、何でも全部、を意味するということになります。そして、ピリオドの前に指定するのはデーターベース名、後ろはテーブル名です。つまり *.* は「すべてのデーターベース」の「すべてのテーブル」に指定した権限を与えるということになります。逆に今回与える権限の範囲を、testというデーターベースのすべてのテーブルに指定したいときは、 *.* の部分が、 test.* となります。

そして、今回のメインとなる部分、to admin@"192.168.0.%" ですが、ここで、ユーザー名と許可ホストを指定することになります。 to [ユーザー名]@[ホスト名] と並べます。この例ではadminというユーザー名で、ローカルネットワークからのみの接続を許可していることになります。"192.168.0.%"の部分ですが、このアドレスはそれぞれの環境に合わせて調整してください。サーバーのIPアドレスがもし192.168.11.1であるなら、調整して"192.168.11.%"としてください。おわかりのように%は*と同じでワイルドカードです。ですから、このユーザーに対して、192.168.0.2からでも、192.168.11.2からでもログインを許可するなら"192.168.%"、ローカルホストからの接続のみを許可したければ、"localhost"とします。逆に、もうどこからでも接続を許すのであれば、単に"%"としてください。

次はパスワードです。identified by 'pass' で設定しています。パスワードなしでユーザー登録するときは、この部分はいりません。省略してください。絶対にお勧めしませんが…。設定の仕方は見たまんまで、identified by '[パスワード]'  となります。

最後に with grant option をつけています。このオプションを指定すると、データーベースやテーブルに対する自分の持つ権限をほかのユーザーに与えることができるようになります。これを省略すると、ほかのユーザーに対する権限の制御ができなくなってしまいます。今回はrootと同じように、何でもできるユーザーを作りたいわけですから、このオプションは必ず記述してください。

これでリモート接続ができるようになったでしょうか?あ、rootで接続しようとしないで下さいねw 今回作った新しいユーザーでしか、リモート接続できません。もちろん、rootでリモートログインできるようにも設定できますが、ユーザー名が必ずあるrootで、初期パスワードが設定されていないかもしれない状態でリモート許可するのは、ちょっとお勧めできませんので^^;それはまたgoogleなどで調べてみてください。まぁ、GUIツールがあれば、そっちでやってしまうのが一番早いです( ̄_ ̄ i)

Reference: http://ameblo.jp/tetsuya-staff/entry-10139707964.html
Reference Grant Command: https://dev.mysql.com/doc/refman/5.6/ja/grant.html

Comments

Popular posts from this blog

Google: How to disable Auto Licensing

Microsoft 365で多要素認証の設定を解除したい