MySQL は、クロスプラットフォームのオープン ソース リレーショナル データベース管理システムであり、サイズが小さく、速度が速く、総所有コストが低いため、ユーザーはこれを利用することができます。最も実用的な結果を得るには、多くのユーザーがアプリケーションの認可原則についてよく知りません。皆さんのために分析してみましょう。 MySQL は、クロスプラットフォームのオープン ソース リレーショナル データベース管理システムであり、サイズが小さく、速度が速く、総所有コストが低いため、ユーザーはこれを利用することができます。最も実用的な結果を得るには、多くのユーザーがアプリケーションの認可原則についてよく知りません。皆さんのために分析してみましょう。
サーバー再起動状況
mysqld が起動すると、すべての許可テーブルの内容がメモリに読み込まれ、その時点から有効になります。
サーバーによって即時に適用される場合
GRANT、REVOKE、または SET PASSWORD を使用した認可テーブルの変更は、サーバーによって直ちに認識されます。
承認フォームの直接変更
グラント テーブルを手動で (INSERT、UPDATE などを使用して) 変更する場合は、FLUSH PRIVILEGES ステートメントを実行するか、mysqladmin flash-privileges を実行して、グラント テーブルをリロードするようにサーバーに指示する必要があります。そうしないと、再起動するまで変更が有効になりません。サーバー。
既存の顧客とのつながりへの影響
サーバーが認可テーブルが変更されたことを認識すると、既存のクライアント接続に次の影響があります。
·テーブルと列の権限は、クライアントの次のリクエストで有効になります。
·データベース権限の変更は、次の USE db_name コマンドで有効になります。
·グローバル権限の変更とパスワードの変更は、次回クライアントが接続したときに有効になります。
委任の原則
どんなに注意していても、ユーザーを承認する際には必ず抜け穴が生じます。通常は、これらのルールに従う必要があります。
root ユーザーのみが認可テーブルを書き換える権限を持っています
root ユーザー以外のユーザーには、認可テーブルを書き換える権限を与えないでください (もちろん、セキュリティを強化するために、管理のために root ユーザーを別のユーザーに置き換えることができる場合)。このため、ユーザーは認可テーブルを上書きすることで既存の権限を上書きできます。セキュリティホールを作ります。
通常、この間違いを犯すことはありませんが、新しいディストリビューションをインストールした後、最初の認証テーブルが作成されます。この脆弱性が存在するため、この時点で承認フォームの内容を理解していないと間違いを犯す可能性があります。
Unix (Linux) では、マニュアルの指示に従って MySQL をインストールした後、mysql_install_db スクリプトを実行して、認証テーブルと初期権限を含む mysql データベースを確立する必要があります。 Windows では、ディストリビューション内のセットアップ プログラムを実行して、データ ディレクトリと mysql データベースを初期化します。サーバーも稼働していると想定されます。
初めて MySQL をマシンにインストールすると、mysql データベース内の認証テーブルが次のように初期化されます。
・localhostからはパスワードを指定せずにrootで接続できます。 root ユーザーはすべての権限 (管理者権限を含む) を持ち、何でもできます。 (ちなみに、MySQL のスーパーユーザーと Unix のスーパーユーザーは同じ名前であり、何の関係もありません。)
·匿名アクセスは、test という名前のデータベースおよび test_ で始まる任意のデータベース名にローカルで接続できるユーザーに付与されます。匿名ユーザーはデータベースに対して何でもできますが、管理権限はありません。
一般に、匿名ユーザー レコードを削除することをお勧めします。
mysql> DELETE FROM user WHERE User="";
さらに一歩進んで、他の認可テーブルの匿名ユーザーも削除します。User 列を持つテーブルは db、tables_priv、columns_priv です。
rootユーザーのパスワードも設定します。
ユーザー、パスワード、ホストの設定について
·すべての MySQL ユーザーにパスワードを使用します。
other_user にパスワードがない場合は、mysql -u other_user db_name を実行するだけで誰でも他の人としてログインできることに注意してください。クライアント/サーバー アプリケーションの場合、クライアントが任意のユーザー名を指定するのが一般的です。実行する前に、次のように mysql_install_db スクリプトを編集することで、すべてのユーザーのパスワード、または MySQL root パスワードのみを変更できます。
シェル> mysql -u root mysql
mysql> UPDATE ユーザー SET Password=PASSWORD('new_password')
-> WHERE ユーザー = 'root';
mysql> フラッシュ権限;