Sunday, May 19, 2013

MySQLのユーザー::助成:: mysql_config_editor ::セキュリティ

Original post: http://anothermysqldba.blogspot.com/2013/05/mysql-users-grants-mysqlconfigeditor.html

データベースに安全にアクセスできる可能性が高い優先順位番号任意のデータベース管理者のためのものです。 そうでないなら、あなたは真剣にそれがない理由を調査する必要があります。 

マニュアルを経由して一般的なガイドラインは、すでに用意されています。 


MySQLにおけるセキュリティと主要な問題の一つは、もちろん、ユーザーを与えるパーミッションです。 
これらは、いくつかの単純なガイドラインです。 

まず最低限に "スーパーユーザ"または "ルート"アカウントを保つ。 フルアクセスまたはあなたの最大接続数に達したときにまだアクセスできるようになります "ALLはGRANT"を持つユーザー。 だからあなたが望む最後の事は、完全なアクセス権を持つユーザーでコマンドを実行するためのプログラムです。 

あなたが作成しているのかアカウントの種類を覚えておいてください。 次のようなユーザーを制限することができますMAXクエリ、MAXを更新し、最大接続数と時間あたりMAXユーザー接続 。 

ユーザーから接続しているネットワーク環境に留意してください。 ユーザーが同じサブネット内のDHCPネットワークアドレスを使用しようとしている場合は、単一のIPにそれらを制限した場合には、自分だけのために多くの仕事を作ることになる。 あなたはまだワイルドカードかかわらサブネットにそれらを制限することができます。 たとえば'192 .168.0.2 ''192 .168.0対。%' 

ホストとユーザーのための全体のワイルドカードアクセス近づか。 



> CREATE USER ''@'192.168.0.56' ;
Query OK, 0 rows affected (0.02 sec)

> show grants for ''@'192.168.0.56';
+-----------------------------------------+
| Grants for @192.168.0.56 |
+-----------------------------------------+
| GRANT USAGE ON *.* TO ''@'192.168.0.56' |
+-----------------------------------------+


これは、192.168.0.56から誰のためにあなたは、広い開いたままにして行うためのスマートセキュアものではありませんでしょう。 
MySQLは最初のホストおよびユーザ名第二をチェックするので、それはまた、192.168.0.56から他のアカウントに違反する可能性があります。 


> GRANT SELECT ON test.* TO 'exampleuser'@'192.168.0.%' IDENTIFIED BY 'somepassword';

> show grants for 'exampleuser'@'192.168.0.%';
+----------------------------------------------------------------------------------------------------------------------+
| Grants for exampleuser@192.168.0.% |
+----------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'exampleuser'@'192.168.0.%' IDENTIFIED BY PASSWORD '*DAABDB4081CCE333168409A6DB119E18D8EAA073' |
| GRANT SELECT ON `test`.* TO 'exampleuser'@'192.168.0.%' |
+----------------------------------------------------------------------------------------------------------------------+

これができるようになりますだけ'192 .168.0からexampleuserために選択されます。% '。 また、心に留めておく必要がありexampleuserシステムはおそらくユーザが接続するサブネットアドレスのホストを192.168.0%のサブネットアドレスの前に最初のユーザローカルホストで使用されますことをしない限り、ローカルホストから接続している場合。 

これは、ホストごとに異なる​​権限を持つ一人のユーザとパスワードを作成できることを意味します。 


> SHOW GRANTS FOR 'exampleuser'@'localhost';
+--------------------------------------------------------------------------------------------------------------------+
| Grants for exampleuser@localhost |
+--------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'exampleuser'@'localhost' IDENTIFIED BY PASSWORD '*DAABDB4081CCE333168409A6DB119E18D8EAA073' |
| GRANT SELECT, UPDATE, DELETE ON `test`.* TO 'exampleuser'@'localhost' |
+--------------------------------------------------------------------------------------------------------------------+

mysqlクライアントを経由してパスワード= <password>はオプション - 使用しないように全力を尽くす。 あなたは、パスワードの入力を要求するように-Pを使用することができます。 

また、使用するためのMySQL 5.6とオプションがあり、MySQLの設定ユーティリティを 。 


# mysql_config_editor set --login-path=local --host=localhost --user=root --password
Enter password: 




# mysql_config_editor print --all
[local]
user = root
password = *****
host = localhost 


#mysqlの
ERROR 1045(28000):ユーザー 'ルート' @ 'localhost'のためにアクセスが拒否されました(パスワードを使用して:NO)

#のmysql - ログインパス=ローカル
MySQLのモニタへようこそ。

#のmysql - ログインパス=ローカル-e 'を今すぐSELECT()';

あなたにも、ローカルまたはリモートおよび等のような別のパスに名前を付けるためのオプションを持っている。 だからあなたが、setコマンドを使用した後に作成されている/。mylogin.cnfファイルを〜に複数のアクセスユーザアカウントを暗号化することができます。 

あなたはおそらくmysqlクライアントを使用するシェルスクリプトを持っている場合は、使用するように更新するスクリプトでパスワードを持っている" -ログインパスは="移動するため、より安全な方法です。 


もちろん、あなたは、もはやユーザーを必要としないときに... ユーザを削除します。 


> DROP USER 'exampleuser'@'localhost';