私は、基本的にクラウド サーバー上で Apache 仮想ホスト、Git リポジトリ、その他のものを準備する一連の bash スクリプトを作成しています。これまでのところ順調で、すべて動作していますが、大きな問題が発生しました。MySQLデータベースとユーザーの作成。
現在のスクリプトは、クラウド サーバーへの認証にキー付きの ssh を使用しており、チームの全員がコマンドを実行できます。この状態を維持し、root または高い権限を持つ他のユーザーとして MySQL にログインしなくても、新しい MySQL データベースとユーザーを作成できるようにしたいのですが、これに対する解決策がありません。
アイデア #1パスワードなしで新しい mysql ユーザーを作成し、完全な権限 (root など) を付与しますが、使用できるのは のみです@'localhost'
。
アイデア #2この MySQL 制御ユーザーのパスワードをファイルに保存し、他のスクリプトが使用する現在の ssh ユーザーのみがアクセスできるようにします。次に、mysql ログインは、この保存されたパスワードを使用してログインし、データベースとユーザーを作成します。
どちらの選択肢がより良いのか分かりませんし、危険であることも分かっています。ご意見やより良いアイデアがあればお聞かせください。
答え1
チームが使用する Unix ユーザーと MySQL ユーザーに、必要な操作を実行できるようにしながら、可能な限り最小限のアクセス権限を与えたいと考えています。どちらのアイデアも、必要以上のアクセス権限を与えているようです。チームの MySQL ユーザーには、次の操作を実行したほうがよいでしょう。
- CREATE アクセスのみ、または必要なアクセスのみを許可します (チームが実行できる操作を最小限に制限します)。GRANT ステートメントを使用して、mysql ユーザーにアクセス権を付与します。
- 所有者の読み取りアクセスのみを持つファイルにユーザー名/パスワードを保存します
~/my.cnf
(チームを制限しなくなりますが、他のユーザーがスクリプトを見た場合にログイン情報が見えなくなります)。
上記は簡単に実行でき、大きな改善となります。
より良いアイデアですが、作業は増えます。それは、チーム ユーザーにデータベース作成のアクセスを許可せず、サイト設定のリクエストをキューに入れることです。キューは、自分だけが制御する (必要なアクセス権のみを持つ) 別のユーザー スクリプトによって定期的に処理され、サイトが設定されます。キューは、各行がリクエストであるファイル、各ファイルがリクエストであるディレクトリ、または各レコードがリクエストであるデータベース テーブルにすることができます。これは、システムをどの程度保護したいかによって異なります。
一般的に、root ほどのアクセス権を持たない UNIX および MySQL ユーザーを使用する必要があります。私は、データベースの作成と削除、および定期的に使用する操作のみを実行できる、作業用の MySQL ユーザーを自分用に作成します。別のユーザーを設定してアクセス権を付与する必要がある場合のみ、root または同様の権限を持つユーザーを使用します。スクリプトでは、問題が発生した場合の損害を最小限に抑えるために、ユーザーを可能な限り制限します。