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'アカウントのアクセス許可が更新され、他のアカウントは更新されないことです。
ホストに制限し、%
を使用してサブネットまたはワイルドカードに基づいて指定したくない場合は、それが唯一の方法です。詳細は MySQLドキュメント を参照してください。
大規模なMySQLのインストールに対する認証を管理する際のオーバーヘッドを排除する方法を探していますが、まだ完璧な解決策を見つけていません。
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」に置き換えることができます。
ワーナーの回答は、ユーザー指定の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など)に希望の信頼できるホストアドレスを反映することにより、着信接続をホストレベルで制限することも忘れないでください。