2014年9月24日水曜日

MySQLのユーザー接続

Original post: http://anothermysqldba.blogspot.com/2014/09/mysql-user-connections.html

だから私は自分自身がMySQLのユーザーとの違いを説明し、それらがどのように認証を発見した。 すべてのこの情報の最初には新しいものではないが、ここで見つけることができます:
私はこれを説明するためにいくつかの現実世界の例を示します。

それはユーザーのアクセス許可を評価するときMySQLは、ユーザー名だけでなく、ログインを使用しています。 ベストプラクティスは、匿名ユーザーを削除するのはこのためです。

この例では、私は次のユーザーでスタートします



MariaDB [(none)]> select user , host from mysql.user;
+---------+-----------+
| user | host |
+---------+-----------+
| root | 127.0.0.1 |
| root | ::1 |
| | centos64 |
| root | centos64 |
| | localhost |
| root | localhost |
+---------+-----------+

私もダウンして、匿名の@ localhostのがデフォルトので、私はユーザ名を持っていないと思ったサーバーにログインできます。


# mysql -u nobody
MariaDB [(なし)]>を選択し、CURRENT_USER();
+ ---------------- +
| CURRENT_USER()|
+ ---------------- +
| @localhost |
+ ---------------- +
MariaDB [(なし)]>ショーの助成金;
+ -------------------------------------- +
| @localhostための助成|
+ -------------------------------------- +
| * ONのGRANT USAGE * 'TO localhost'の '@'。|
+ -------------------------------------- +

私は多くを行うことはできませんが、私はまだデータベースに乗り込んだ。

今、私は既知のユーザーを渡す場合:


# mysql -u root -p
MariaDB [(なし)]>を選択しCURRENT_USER;
+ ---------------- +
| CURRENT_USER |
+ ---------------- +
|ルート@ localhostの|
+ ---------------- +
MariaDB [(なし)]>ショーの助成金;
+----------------------------------------------------------------------------------------------------------------------------------------+
|ルート@ localhostの助成|
+----------------------------------------------------------------------------------------------------------------------------------------+
|に掲示されているすべての権限を付与* *「ルート」を@にパスワードでIDENTIFIED 'localhost'の '* 8CD56861FDADF7A264741F27D502D1A8DAE0A8F7を' WITH GRANT OPTIONを。|
| GRANT PROXY ON '' @ 'WITH GRANT OPTIONを' localhost 'の@「ルート」へ|
+----------------------------------------------------------------------------------------------------------------------------------------+


現在、rootユーザーは、4つの異なるアカウントを持っている。

MariaDB [(none)]> select user , host from mysql.user where user = 'root';
+------+-----------+
| user | host |
+------+-----------+
| root | 127.0.0.1 |
| root | ::1 |
| root | centos64 |
| root | localhost |
+------+-----------+

これらは、すべての異なるアカウントです。 私はしかし、それらのいずれかが必要。 私は、ローカルホスト接続を経由してrootアカウントを使用しています。

MariaDB [(none)]> DROP USER 'root'@'127.0.0.1';
Query OK, 0 rows affected (0.33 sec)

MariaDB [(none)]> DROP USER 'root'@'centos64';
Query OK, 0 rows affected (0.02 sec)

MariaDB [(none)]> DROP USER 'root'@'::1';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> select user , host from mysql.user where user = 'root';
+------+-----------+
| user | host |
+------+-----------+
| root | localhost |
+------+-----------+

だから私は、4つの異なるアカウントによって何を意味しましたか? 彼らはすべてのrootユーザーアカウント。 いいえ..彼らは根であり、どのようなホスト。 したがって、各アカウント(ユーザー+ホスト)は異なる権限を持つことができます。

だから私たちは違いを示すために次の例を行います。
したがって、この例では、サーバーは、2つのネットワークインタフェースを持っています。 だから私は、違いを示すために、すべてのアクセスポイントに異なるアクセス権を持つ各ユーザーごとに作成されます。 私は、同じパスワードを設定しますが、これらも同様に異なる可能性があります。

MariaDB [(none)]> GRANT SELECT ON *.* TO 'anothermysqldba'@'10.0.2.15' IDENTIFIED BY '<cleartext password>';
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE , DROP, RELOAD, SHUTDOWN, PROCESS, FILE, INDEX, ALTER ON *.* TO 'anothermysqldba'@'192.168.0.%' IDENTIFIED BY '<cleartext password>';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'anothermysqldba'@'localhost' IDENTIFIED BY '<cleartext password>' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(なし)]> [ユーザーの選択、ここでユーザ= 'anothermysqldba'のmysql.userからホスト;
+ ----------------- + ------------- +
|ユーザー|ホスト|
+ ----------------- + ------------- +
| anothermysqldba | 10.0.2.15 |
| anothermysqldba | 192.168.0%。|
| anothermysqldba |ローカルホスト|
+ ----------------- + ------------- +

だから、これは何を意味するのでしょうか? MySQLは異なるアクセス許可として、すべてのユーザアクセスポイントのユーザを検証するだけでなく、ホストを使用しているため、ユーザ名が同じであるにもかかわらず。

あなたが開発者の一部を信頼するかもしれませんが、これは多くの場合、彼らはリモートまたはそれらのスクリプトで作業している場合、そのアクセスの一部を制限することをお勧めします。 彼らはあなたを必要としない何かをする必要が、彼らはサーバーに自分自身をSSHおよび他のタスクを実行するにはログインする必要があります。 もちろん、これはあなたのビジネスおよび/またはアプリケーションとの関係や仕事の流れに依存している。

10.0.2.15のホストを使用してユーザーがアクセスのみを選択しています。

# mysql -h 10.0.2.15 -u anothermysqldba -p
MariaDB [(なし)]>を選択し、CURRENT_USER();
+ --------------------------- +
| CURRENT_USER()|
+ --------------------------- +
| anothermysqldba@10.0.2.15 |
+ --------------------------- +
MariaDB [(なし)]>ショーの助成金;
+-------------------------------------------------------------------------------------------------------------------------+
| anothermysqldba@10.0.2.15ための助成|
+-------------------------------------------------------------------------------------------------------------------------+
| GRANTはON * SELECT * TO 'anothermysqldba'@'10.0.2.15'パスワードでIDENTIFIED '* 31360D7EE84BE965C0E759179FC61B6943BCA64F'。|
+-------------------------------------------------------------------------------------------------------------------------+

192.168.0.26のホストを使用すると、ユーザは、より多くのアクセスを有する。 このアカウントは、192.168.0 / 255(%)サブネットの下には何も渡ってアクセスできるように設定されています。

# mysql -h 192.168.0.26 -u anothermysqldba -p
MariaDB [(なし)]>を選択し、CURRENT_USER();
+ ----------------------------- +
| CURRENT_USER()|
+ ----------------------------- +
| anothermysqldba@192.168.0.% |
+ ----------------------------- +
MariaDB [(なし)]>ショーの助成金;
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| anothermysqldba@192.168.0.%ための助成|
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、RELOAD、SHUTDOWN、プロセス、ファイル、INDEX、 ALTER ON * 'anothermysqldba'@'192.168.0.%'パスワードでIDENTIFIED '* 31360D7EE84BE965C0E759179FC61B6943BCA64F' TO。|
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

あなたが想定するように、ローカルホストユーザーがフルアクセスアカウントを持っています。

# mysql -u anothermysqldba -p
MariaDB [(なし)]>を選択し、CURRENT_USER();
+ --------------------------- +
| CURRENT_USER()|
+ --------------------------- +
| anothermysqldbaする@ localhostの|
+ --------------------------- +
セット内の1行(0.00秒)

MariaDB [(なし)]>ショーの助成金;
+---------------------------------------------------------------------------------------------------------------------------------------------------+
| anothermysqldbaする@ localhostの助成|
+---------------------------------------------------------------------------------------------------------------------------------------------------+
|に掲示されているすべての権限を付与* * 'anothermysqldba' @するためのパスワード、IDENTIFIED 'localhost'の '* 31360D7EE84BE965C0E759179FC61B6943BCA64Fを' WITH GRANT OPTIONを。|
+---------------------------------------------------------------------------------------------------------------------------------------------------+

今、私はそれが匿名ユーザーを削除することをお勧めする前に言ったように。 使い方mysql_secure_installationインストールのことだけでなく、彼のに役立ちます。

なぜそれが重要ではありません?

# mysql -u anothremysqldba -p
MariaDB [(なし)]>を選択し、CURRENT_USER();
+ ---------------- +
| CURRENT_USER()|
+ ---------------- +
| @localhost |
+ ---------------- +
セット内の1行(0.00

簡単なは、...を超えていると、単純な間違いを避ける。 タイプミスは、これを許可してはならない、データベースへのアクセスを許可された。

それでは、削除して再度テストします。

MariaDB [(none)]> DROP USER ''@'localhost';
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> DROP USER ''@'centos64';
Query OK, 0 rows affected (0.00 sec)

#mysqlの-u anothremysqldba -p
パスワードを入力してください:
ERROR 1045(28000):アクセスがパスワードを使用して(利用者のために 'anothremysqldba' @ 'localhostの'を拒否されました:YES

データベースが主にホスト名またはIPアドレス厳格なしワイルドカードとして%を使用して作成されているのであればそれは何を意味するのでしょうか?

これはあなたの部分のセキュリティとビジネスの決定だろう。 個人的にはどちらも私の意見では有効なオプションです。 ワイルドカード(%)が、何も堅牢なアクセスポイントを許可しないが、ファイアウォールに異常が発生した場合、それはまた、ネットワークユーザからリモートへのアクセスをオープンします。 ユーザーごとの厳格なIPアドレスも私の意見ではなく、厳密なですが、それはユーザーによって異なります。 。192.168.0%:例えばさえレプリケーション用に作成されたアカウントを使用して、私はまだ%、すなわちでIPアドレスを使用することを好む。 IPアドレスは、( リモートユーザであっても、静的な変更DBAは頻繁に言われていません変更しないと、それは多くの場合、アクセス障害の上の苦情をDBAに来る人になる。

私はかつて静的IPアドレスにロックされたすべてのユーザーのアクセスが制限され人と働いた。 この人は常にgrant文​​を変更する必要がありました。 人々は、あなたの最後のセキュリティを確保することができながら、簡単かつ効率的に作業できるようにする必要があります。