Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


6.2.2 権限システム付与テーブル

通常では、アカウントをセットアップして各アカウントで使用可能な権限を制御するためには、GRANTREVOKE などのステートメントを使用することによって、mysql データベース内の付与テーブルの内容を間接的に操作します。セクション13.7.1「アカウント管理ステートメント」を参照してください。ここでは付与テーブルの基本構造と、サーバーがクライアントと対話するときに付与テーブルの内容をどのように使用するかについて説明します。

次の mysql データベーステーブルには付与情報が格納されています。

  • user: ユーザーアカウント、グローバル権限、および権限以外のその他のカラムが含まれています。

  • db: データベースレベルの権限が格納されています。

  • host: 使用されなくなりました。MySQL 5.6.7 以降の新しい MySQL インストールではこのテーブルが作成されなくなりました。

  • tables_priv: テーブルレベルの権限が格納されています。

  • columns_priv: カラムレベルの権限が格納されています。

  • procs_priv: ストアドプロシージャーおよびストアドファンクションの権限が格納されています。

  • proxies_priv: プロキシユーザー権限が格納されています。

mysql データベース内のほかのテーブルには付与情報が保持されておらず、ほかの場所で説明されています。

注記

mysql データベース内のテーブルの変更は、CREATE USERGRANTCREATE PROCEDURE などのステートメントの応答としてサーバーによって通常実行されます。INSERTUPDATEDELETE などのステートメントを使用してこれらのテーブルを直接変更することは推奨されません。これらの変更の結果として誤った形式となった行を、サーバーは随意で無視します。

各付与テーブルにはスコープカラムと権限カラムがあります。

  • スコープカラムはテーブル内の各行 (エントリ) のスコープ、つまり行が適用されるコンテキストを決定します。たとえば、HostUser の値が 'thomas.loc.gov''bob' である user テーブル行は、bob というユーザー名を指定するクライアントによるホスト thomas.loc.gov からサーバーに対して実行する認証接続のために使用されます。同様に、HostUser、および Db カラム値が 'thomas.loc.gov''bob'、および 'reports' である db テーブル行は、bobthomas.loc.gov ホストから reports データベースに接続するときに使用されます。tables_priv テーブルおよび columns_priv テーブルには、それぞれの行に適用されるテーブルまたはテーブルとカラムの組み合わせを示すスコープカラムがあります。procs_priv スコープカラムは、それぞれの行に適用されるストアドルーチンを示します。

  • 権限カラムは、テーブル行によって付与される権限、つまり実行可能な操作を指定します。サーバーはさまざまな付与テーブル内の情報を組み合わせてユーザーの権限の完全な記述を構成します。この実行に使用されるルールの説明は、セクション6.2.5「アクセス制御、ステージ 2: リクエストの確認」にあります。

サーバーは次の方法で付与テーブルを使用します。

  • user テーブルのスコープカラムは、入接続を拒否または許可するかを決定します。許可される接続について、user テーブル内で付与されるすべての権限は、ユーザーのグローバル権限を示します。このテーブル内で付与されるすべての権限は、サーバー上のすべてのデータベースに適用されます。

    注記

    あらゆるグローバル権限は、すべてのデータベースに対する権限とみなされるため、あらゆるグローバル権限を持つユーザーは、SHOW DATABASES を使用したり、または INFORMATION_SCHEMASCHEMATA テーブルを調べたりすることで、すべてのデータベース名を表示できるようになります。

  • db テーブルのスコープカラムは、どのユーザーがどのホストからどのデータベースにアクセスできるかを決定します。権限カラムは、許可される操作を決定します。データベースレベルで付与される権限は、データベースのほかテーブルやストアドプログラムなどのデータベース内のすべてのオブジェクトに適用されます。

  • tables_priv および columns_priv テーブルは db テーブルと似ていますが、これらはさらに粒度が細かく、データベースレベルでなくテーブルレベルおよびカラムレベルに適用されます。テーブルレベルで付与される権限は、テーブルおよびそのすべてのカラムに適用されます。カラムレベルで付与される権限は、特定のカラムにのみ適用されます。

  • procs_priv テーブルはストアドルーチンに適用されます。ルーチンレベルで付与される権限は、単一ルーチンにのみ適用されます。

  • proxies_priv テーブルは、ほかのユーザーのプロキシの役割を担うことができるユーザーがだれか、およびプロキシユーザーが PROXY 権限をほかのユーザーに付与できるかどうかを指定します。

サーバーは mysql データベース内の user および db テーブルを、アクセス制御のステージ 1 とステージ 2 の両方で使用します (セクション6.2「MySQL アクセス権限システム」を参照してください)。userdb のテーブルのカラムをここで示します。

表 6.3 user テーブルおよび db テーブルのカラム

テーブル名 user db
スコープカラム Host Host
  User Db
  Password User
権限カラム Select_priv Select_priv
  Insert_priv Insert_priv
  Update_priv Update_priv
  Delete_priv Delete_priv
  Index_priv Index_priv
  Alter_priv Alter_priv
  Create_priv Create_priv
  Drop_priv Drop_priv
  Grant_priv Grant_priv
  Create_view_priv Create_view_priv
  Show_view_priv Show_view_priv
  Create_routine_priv Create_routine_priv
  Alter_routine_priv Alter_routine_priv
  Execute_priv Execute_priv
  Trigger_priv Trigger_priv
  Event_priv Event_priv
  Create_tmp_table_priv Create_tmp_table_priv
  Lock_tables_priv Lock_tables_priv
  References_priv References_priv
  Reload_priv  
  Shutdown_priv  
  Process_priv  
  File_priv  
  Show_db_priv  
  Super_priv  
  Repl_slave_priv  
  Repl_client_priv  
  Create_user_priv  
  Create_tablespace_priv  
セキュリティーカラム ssl_type  
  ssl_cipher  
  x509_issuer  
  x509_subject  
  plugin  
  authentication_string  
  password_expired  
リソース制御カラム max_questions  
  max_updates  
  max_connections  
  max_user_connections  

mysql.user テーブルの plugin および authentication_string カラムは認証プラグイン情報を格納します。

アカウント行の plugin カラムが空の場合、サーバーは Password カラムのパスワードハッシュの形式に応じて、mysql_native_password または mysql_old_password プラグインを暗黙的に使用してアカウントを認証します。Password 値が空または 4.1 のパスワードハッシュ (41 文字) である場合、サーバーは mysql_native_password を使用します。パスワード値が 4.1 より前のパスワードハッシュ (16 文字) の場合、サーバーは mysql_old_password を使用します。(これらのハッシュ形式についての追加情報は、セクション6.1.2.4「MySQL でのパスワードハッシュ」を参照してください。)クライアントは、アカウント行の Password カラム内のパスワードと一致する必要があります。

アカウント行で plugin カラムにプラグインが指定された場合、サーバーはこれを使用して、アカウントに対する接続の試行を認証します。プラグインが Password カラム内の値を使用するかどうかはプラグインによって異なります。

password_expired カラムは、DBA がアカウントパスワードを期限切れにして、ユーザーにパスワードをリセットするよう求めることができるようにするために、MySQL 5.6.6 で追加されました。デフォルトの password_expired 値は 'N' ですが、ALTER USER ステートメントを使用して 'Y' に設定できます。アカウントのパスワードの有効期限が切れたあと、サーバーへの以降の接続で、そのアカウントによって実行されるすべての操作は、ユーザーが SET PASSWORD ステートメントを発行して新しいアカウントパスワードを確立するまで、エラーになります。セクション13.7.1.1「ALTER USER 構文」を参照してください。

パスワードの有効期限が切れたあと、SET PASSWORD を使用してパスワードを現在の値に設定することによって、パスワードをリセットすることができます。適切なポリシーとして、別のパスワードを選択することをお勧めします。

注意

MySQL 5.6.6 で、ALTER USERPassword カラムを空の文字列に設定するため、このステートメントは 5.6.7 まで使用しないでください。

アクセス制御のステージ 2 で、サーバーはリクエスト検証を実行して、クライアントが発行した各リクエストに対してそれぞれのクライアントが十分な権限を持つことを確認します。user および db 付与テーブルに加えて、テーブルに関するリクエストの場合、サーバーは tables_priv および columns_priv テーブルを参照することもあります。後者のテーブルは、テーブルレベルおよびカラムレベルでの細かい権限制御を提供します。これらには、次の表に示すカラムがあります。

表 6.4 tables_priv テーブルおよび columns_priv テーブルのカラム

テーブル名 tables_priv columns_priv
スコープカラム Host Host
  Db Db
  User User
  Table_name Table_name
    Column_name
権限カラム Table_priv Column_priv
  Column_priv  
その他のカラム Timestamp Timestamp
  Grantor  

Timestamp カラムおよび Grantor カラムは、それぞれ現在のタイムスタンプおよび CURRENT_USER 値に設定されます。ただし、これらは未使用のため、ここではこれ以上説明しません。

ストアドルーチンに関するリクエストを検証するために、サーバーは procs_priv テーブルを参照することがあり、このテーブルには次の表に示すカラムがあります。

表 6.5 procs_priv テーブルのカラム

テーブル名 procs_priv
スコープカラム Host
  Db
  User
  Routine_name
  Routine_type
権限カラム Proc_priv
その他のカラム Timestamp
  Grantor

Routine_type カラムは、'FUNCTION' または 'PROCEDURE' の値を持つ ENUM カラムであり、その行が示すルーチンのタイプを指します。このカラムにより、同じ名前を持つ関数とプロシージャーに別々に権限を付与することができます。

Timestamp カラムと Grantor カラムは現在未使用のため、ここではこれ以上説明しません。

proxies_priv テーブルはプロキシユーザーについての情報を記録します。これには次のカラムがあります。

  • HostUser: これらのカラムは、プロキシ設定されるアカウントに対して PROXY 権限を持つユーザーアカウントを示します。

  • Proxied_hostProxied_user: これらのカラムは、プロキシ設定されるユーザーのアカウントを示します。

  • Grantor: 現在未使用です。

  • Timestamp: 現在未使用です。

  • With_grant: このカラムは、プロキシアカウントが PROXY 権限を別のアカウントに付与できるかどうかを示します。

付与テーブルのスコープカラムには文字列が格納されています。これらは次に示すように宣言され、それぞれのデフォルト値は空の文字列です。

表 6.6 付与テーブルのスコープカラムの型

カラム名
HostProxied_host CHAR(60)
UserProxied_user CHAR(16)
Password CHAR(41)
Db CHAR(64)
Table_name CHAR(64)
Column_name CHAR(64)
Routine_name CHAR(64)

アクセスチェックのために、UserProxied_userPasswordDb、および Table_name 値の比較は大文字小文字を区別します。HostProxied_hostColumn_name、および Routine_name 値の比較は大文字小文字を区別しません。

user および db テーブルでは、各権限は、ENUM('N','Y') DEFAULT 'N' として宣言される別個のカラムにリストされます。つまり、各権限は無効または有効にすることができ、デフォルトは無効です。

tables_privcolumns_priv、および procs_priv のテーブルでは、権限カラムは SET カラムとして宣言されます。これらのカラムの値は、テーブルによって制御されるあらゆる組み合わせの権限を含むことができます。カラム値にリストされている権限のみが入力されます。

表 6.7 Set タイプ権限のカラム値

テーブル名 カラム名 可能な Set 要素
tables_priv Table_priv 'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter', 'Create View', 'Show view', 'Trigger'
tables_priv Column_priv 'Select', 'Insert', 'Update', 'References'
columns_priv Column_priv 'Select', 'Insert', 'Update', 'References'
procs_priv Proc_priv 'Execute', 'Alter Routine', 'Grant'

管理者権限 (RELOADSHUTDOWN など) は、user テーブルのみで指定されます。管理操作はサーバー自体での操作であって、データベース固有でないため、これらの権限をほかの付与テーブルにリストする理由はありません。したがって、ユーザーが管理操作を実行できるかどうかを判別するには、サーバーは user テーブルのみ参照する必要があります。

FILE 権限も、user テーブルでのみ指定されます。これはそもそも管理権限ではありませんが、サーバーホスト上のファイルを読み取りまたは書き込みするための能力は、アクセスするデータベースとは無関係です。

mysqld サーバーは、起動時に付与テーブルの内容をメモリーに読み取ります。FLUSH PRIVILEGES ステートメントを発行するか、mysqladmin flush-privileges または mysqladmin reload コマンドを実行することによって、テーブルをリロードするようサーバーに指示することができます。付与テーブルへの変更は、セクション6.2.6「権限変更が有効化される時期」で示すように反映されます。

アカウントの権限を変更するとき、変更によって権限が希望どおりにセットアップされるかどうかを確認することをお勧めします。特定のアカウントの権限をチェックするには、SHOW GRANTS ステートメントを使用します (セクション13.7.5.22「SHOW GRANTS 構文」を参照してください)。たとえば、ユーザー名およびホスト名の値がそれぞれ bob および pc84.example.com のアカウントに付与された権限を調べるには、次のステートメントを使用します。

SHOW GRANTS FOR 'bob'@'pc84.example.com';

User Comments
Sign Up Login You must be logged in to post a comment.