web-dev-qa-db-ja.com

MySQL:複数のホストから接続できるユーザーの作成

MySQLを使用していて、ローカルホストまたは別のサーバーから接続できるアカウントを作成する必要があります(10.1.1.1など)。だから私はやっています:

CREATE USER 'bob'@'localhost' IDENTIFIED BY 'password123';
CREATE USER 'bob'@'10.1.1.1' IDENTIFIED BY 'password123';
GRANT SELECT, INSERT, UPDATE, DELETE on MyDatabse.* to 'bob'@'localhost', 'bob'@'10.1.1.1';

これは正常に機能しますが、複数のIPにリンクされているユーザーアカウントを作成するよりエレガントな方法はありますか、またはこのようにする必要がありますか?

私の主な心配は、将来的に、1つの 'bob'アカウントのアクセス許可が更新され、他のアカウントは更新されないことです。

33
DrStalker

ホストに制限し、%を使用してサブネットまたはワイルドカードに基づいて指定したくない場合は、それが唯一の方法です。詳細は MySQLドキュメント を参照してください。

大規模なMySQLのインストールに対する認証を管理する際のオーバーヘッドを排除する方法を探していますが、まだ完璧な解決策を見つけていません。

22
Warner

MySQLシェル内で「chaminda」という新しいユーザーを作成することから始めましょう。

CREATE USER 'chaminda'@'%' IDENTIFIED BY 'password';

最初にすることは、ユーザーに必要な許可を与えることです。ここでは、特定のユーザーにすべての許可を与えています。

GRANT ALL PRIVILEGES ON * . * TO 'chaminda'@'%';

すべての特権を再ロードします。

FLUSH PRIVILEGES;

特定のユーザーにIPの範囲を許可する場合は、次のように使用します10.1.1。%

GRANT ALL PRIVILEGES ON * . * TO 'chaminda'@'10.1.1.%';

注:ここにホスト名=%とあり、どのホストからでもこのデータベースサーバーにアクセスできます。ユーザーにすべての権限を付与することは大きなリスクであり、これはベストプラクティスではありません。さらに、ユーザー「chaminda」を「bob」に置き換えることができます。

10

ワーナーの回答は、ユーザー指定のCIDR範囲を使用して(「ネットワーク」/「ネットマスク」表記で)、次のように洗練されます。

CREATE USER 'bob'@'10.0.0.0/255.0.0.0' IDENTIFIED BY 'password123';

CREATE USER 'bob'@'192.168.0.0/255.255.255.192' IDENTIFIED BY 'password123';

この構成により、きめ細かいアクセス制御が可能になります。ワーナーの答えは、ユーザー 'bob'がネットワーク上の任意のホストから(またはサーバーがパブリックネットワークに公開されている場合は、パブリックインターネット上の任意のホストから)接続できるようにします。

"Defence in Depth"を適用することは認められています。これは、必要な信頼できるホストアドレスのみからのユーザーアクセスを制限することによって促進されます。また、ホストベースのファイアウォール(iptables、firewalldなど)に希望の信頼できるホストアドレスを反映することにより、着信接続をホストレベルで制限することも忘れないでください。

0
rosco