MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  セキュリティー  /  アクセス制御とアカウント管理

6.2 アクセス制御とアカウント管理

MySQL では、クライアントユーザーがサーバーに接続し、サーバーによって管理されるデータにアクセスできるようにするアカウントを作成できます。 MySQL 権限システムの主な役割は、特定のホストから接続するユーザーを認証すること、およびそのユーザーを、SELECTINSERTUPDATEDELETE などのデータベースにおける権限に関連付けることです。 追加機能には、管理操作の権限を付与する機能が含まれます。

接続できるユーザーを制御するために、各アカウントにパスワードなどの認証資格証明を割り当てることができます。 MySQL アカウントへのユーザーインタフェースは、CREATE USERGRANTREVOKE などの SQL ステートメントで構成されます。 セクション13.7.1「アカウント管理ステートメント」を参照してください。

MySQL 権限システムによって、すべてのユーザーは自分に許可された操作のみ実行可能になります。 ユーザーとして MySQL サーバーに接続すると、ユーザーの ID は、接続元のホストおよび指定したユーザー名によって決定されます。 接続後にリクエストを発行すると、システムは、ユーザー ID と ユーザーが行う操作に応じて権限を付与します。

MySQL ではホスト名とユーザー名の両方を考慮に入れてユーザーを特定しますが、これは、特定のユーザー名がすべてのホストで同一人物に属すると想定する根拠がないためです。 たとえば、office.example.com から接続したユーザー joe は、home.example.com から接続した joe と同一人物とは限りません。 MySQL では、たまたま同じ名前を持った異なるホスト上のユーザーを識別できるようにすることによってこれを処理します。つまり、office.example.com からの joe による接続に対して 1 つの権限セットを付与し、home.example.com からの joe による接続に対して別の権限セットを提供することができます。 特定のアカウントが持つ権限を表示するには、SHOW GRANTS ステートメントを使用します。 例:

SHOW GRANTS FOR 'joe'@'office.example.com';
SHOW GRANTS FOR 'joe'@'home.example.com';

内部的に、サーバーは mysql システムデータベースの付与テーブルに特権情報を格納します。 MySQL サーバーはこれらのテーブルの内容を起動時にメモリーに読み取り、付与テーブルのインメモリーコピーに基づいてアクセス制御を決定します。

サーバーに接続するクライアントプログラムを実行するとき、MySQL アクセス制御には 2 つのステージがあります。

ステージ 1: サーバーは、ユーザーの ID および正しいパスワードを指定することによって ID を検証できるかどうかに基づいて、接続を受け入れるか拒否します。

ステージ 2: 接続できる場合、サーバーはユーザーが発行する各ステートメントを検査して、ステートメントを実行するだけの十分な権限をユーザーが持っているかどうかを判別します。 たとえば、データベースのテーブルからレコードを選択したり、データベースのテーブルを削除したりしようとすると、サーバーはユーザーにそのテーブルの SELECT 権限があるかどうか、またはデータベースの DROP 権限があるかどうかを検証します。

各ステージで発生する動作の詳細な説明については、セクション6.2.6「アクセス制御、ステージ 1: 接続の検証」およびセクション6.2.7「アクセス制御、ステージ 2: リクエストの確認」を参照してください。 権限に関連した問題の診断についての支援情報は、セクション6.2.21「MySQL への接続の問題のトラブルシューティング」を参照してください。

ユーザーの接続中に (ユーザー自身または別のだれかによって) 権限が変更された場合、それらの変更は、ユーザーが発行する次のステートメントで必ずしもすぐに有効になるわけではありません。 サーバーが付与テーブルをリロードする条件についての詳細は、セクション6.2.13「権限変更が有効化される時期」を参照してください。

MySQL 権限システムでは実行できないこともあります。

  • 特定ユーザーのアクセスを拒否するように明示的に指定することはできません。 つまり、ユーザーを明示的に突き合わせて接続を拒否することはできません。

  • ユーザーがデータベースのテーブルを作成または削除できるが、データベース自体の作成または削除はできないような権限をユーザーが持つように指定することはできません。

  • パスワードはアカウントに対してグローバルに適用されます。 データベース、テーブル、ルーチンなどの特定のオブジェクトにパスワードを関連付けることはできません。


関連キーワード:  ユーザー, アカウント, 接続, 権限, パスワード, 管理, 認証, サーバー, テーブル, プラガブル