MySQL 認証システムの主な機能は、認証されたユーザーをデータベースに対する権限 (SELECT、INSERT、UPDATE、DELETE など) に関連付けることです。認証システムの機能には、匿名ユーザーを持つ機能と、LOAD DATA INFILE やさまざまな管理操作などの特定の機能を有効にする機能が含まれます。この承認により、ユーザーは適切な権限を付与された操作のみを実行できるようになります。
適切なユーザー権限の決定
グローバルに、または特定のデータベース、テーブル、または列に対して、さまざまなレベルで MySQL アカウントにいくつかのタイプの権限を付与できます。たとえば、グローバル レベルでユーザーに SELECT 権限を付与することで、任意のデータベース内の任意のテーブルから選択できるようにすることができます。
他のデータベースに対する権限がなくても、特定のデータベースを完全に制御できるアカウントを与えることができます。その後、アカウントはデータベースの作成、テーブルおよびその他のデータベース オブジェクトの作成、テーブルからの選択、新しいレコードの追加、削除、または更新を行うことができます。
管理者権限の付与
管理ユーザーには、次のグローバル権限が適用されます:
- ファイル :サーバー ホスト ファイル システム内のファイルの読み取りと書き込みを MySQL サーバーに指示することをユーザーに許可します。
- プロセス :ユーザーが SHOW PROCESSLIST ステートメントを使用して、クライアントが実行しているすべてのステートメントを表示できるようにします。
- スーパー :ユーザーが他のクライアント接続を強制終了したり、サーバーのランタイム構成を変更したりできるようにします。
- すべて :他のユーザーに権限を付与する機能を除くすべての権限を付与します。
スーパー 管理者権限により、ユーザーは、グローバル変数の設定やクライアント接続の終了など、追加のタスクを実行できます。いくつかの特別な権限指定子もあります:
– ALL および ALL PRIVILEGES を使用して、他のアカウントに特権を付与する機能を除くすべての特権を付与します。 GRANT ALL … WITH GRANT OPTION を使用 他のアカウントに権限を付与する機能を含むすべての権限を付与します。
– USAGE を使用して、サーバーに接続する機能を付与します。この権限は、アカウントのユーザー テーブルにレコードを作成しますが、権限はありません。このアカウントは、SHOW VARIABLES または SHOW STATUS ステートメントの発行など、限定された目的でサーバーにアクセスするために使用できます。このアカウントを使用してテーブルなどのデータベース コンテンツにアクセスすることはできませんが、そのような権限は後で付与できます。
その他の管理者権限には CREATE USER が含まれます 、一時テーブルを作成 、データベースを表示 、テーブルをロック 、リロード 、およびシャットダウン .スライドに示されているものを含む管理者特権は、セキュリティの侵害、特権データへのアクセス、またはサーバーに対するサービス拒否攻撃の実行に使用される可能性があります。悪意のあるユーザーや不注意なユーザーによって悪用される可能性があるため、管理者権限は慎重に付与してください。
GRANT ステートメント
GRANT ステートメントは、新しいアカウントを作成するか、既存のアカウントを変更します。
GRANT 構文:
GRANT SELECT ON world_innodb.* TO 'kari'@'localhost' IDENTIFIED BY 'Abc123';
上記の構文/例では、このステートメントは、world_innodb データベース内のすべてのテーブルに対する SELECT 権限を kari という名前のユーザーに付与します。このユーザーは、ローカル ホストから接続し、Abc123 のパスワードを使用する必要があります。
声明の条項:
1.付与される権限
2.特権レベル:
- グローバル:*.*
- データベース:[db_name].*
- テーブル:[db_name].[table_name]
- 保存されたルーチン:[db_name].[routine_name]
3. 権限を付与するアカウント。
4.オプションのパスワード。
GRANT ステートメントの句には次の効果があります:
- 付与 キーワード:付与する特権を示す 1 つ以上の特権名を指定します。権限名は大文字と小文字が区別されません。複数の権限を一覧表示するには、それらをコンマで区切ります。
- オン 句:付与する権限のレベルを指定します。
- TO 句:権限を付与するアカウントを指定します。アカウントがまだ存在しない場合は、ステートメントによって作成されます。
- 識別者 句:(オプション) 指定されたパスワードをアカウントに割り当てます。アカウントが既に存在する場合は、古いパスワードがパスワードに置き換えられます。
IDENTIFIED BY 句を省略すると、次のような影響があります:
- TO 句のアカウントが存在する場合、そのパスワードは変更されません。
- TO 句のアカウントが存在しない場合は、空白のパスワードで作成されます。
セキュリティ対策として、NO_AUTO_CREATE_USER を有効にします IDENTIFIED BY 句を指定しない場合、GRANT ステートメントが新しいアカウントを作成しないようにする SQL モード。
GRANT 権限を表示
SHOW GRANTS は、指定されたユーザーの特権を再作成するステートメントを表示します。ステートメントで指定された正確なアカウントの特権のみが表示されます。以下の例は、kari@% ではなく、[email protected] の権限のみを示しています。
SHOW GRANTS; SHOW GRANTS FOR CURRENT_USER();
次の権限を表示するアカウント名を指定することもできます:
mysql>SHOW GRANTS FOR 'kari'@'myhost.example.com'; +----------------------------------------------------------------+ | Grants for [email protected] | +----------------------------------------------------------------+ | GRANT FILE ON *.* TO 'kari'@'myhost.example.com' | | GRANT SELECT ON `world_innodb`.* TO 'kari'@'myhost.example.com‘| | IDENTIFIED BY PASSWORD | | '*E74858DB86EBA20BC33D0AECAE8A8108C56B17FA' | +----------------------------------------------------------------+
上記の出力は、2 つの GRANT ステートメントで構成されています。これらの ON 句は、それぞれグローバル レベルとデータベース レベルで権限を表示します。アカウントにパスワードがある場合、SHOW GRANTS は GRANT ステートメントの最後に IDENTIFIED BY PASSWORD 句を表示します。この句は、アカウントのグローバル権限をリストします。 IDENTIFIED BY の後の PASSWORD という単語は、表示されるパスワード値が実際のパスワードではなく、ユーザー テーブルに格納されている暗号化された値であることを示します。パスワードは一方向暗号化を使用して保存されるため、MySQL には暗号化されていないパスワードを表示する方法がありません。
アカウントがその権限の一部またはすべてを他のアカウントに付与できる場合、出力では、適用される各 GRANT ステートメントの最後に WITH GRANT OPTION が表示されます。
ユーザー権限の制限
特定のユーザーへのアクセスを明示的に拒否することはできません。データベース、テーブル、ルーチンなどの特定のオブジェクトにパスワードを関連付けることはできません。
グラント テーブル
MySQL サーバーは、起動時に mysql データベースからメモリに許可テーブルを読み取り、それらのテーブルに基づいてすべてのアクセス制御の決定を行います。表は権限レベルに対応しています:
特権レベル/テーブル | 内容と特典 |
---|---|
ユーザー | サーバーが認識している各アカウントのレコードを含みます |
データベース | データベース固有の権限 |
tables_priv | テーブル固有の特権 |
columns_priv | 列固有の権限 |
procs_priv | ストアド プロシージャと関数の特権 |
ユーザー テーブルには、サーバーが認識している各アカウントのレコードと、そのグローバル権限が含まれています。また、次のようなアカウントに関するその他の情報も示します。
- 対象となるリソース制限
- アカウントを使用するクライアント接続を、SSL を使用した安全な接続で行う必要があるかどうか
すべてのアカウントにはユーザー テーブル レコードが必要です。サーバーは、そのテーブルの内容を読み取って、各接続試行を受け入れるか拒否するかを決定します。各アカウントは、グローバル レベル以外のレベルで権限を持っている場合、他の付与テーブルにもレコードを持っています。
補助金表の使用
サーバーは、ユーザー テーブルのホスト、ユーザー、およびパスワード列に基づいて、クライアントが接続できるかどうかを判断します。正常に接続するには、MySQL はユーザー テーブル内のレコードを、クライアントの接続元のホスト、クライアントによって指定されたユーザー名、および一致するレコードにリストされているパスワードと照合する必要があります。
クライアントが接続した後、MySQL はアカウントの ID を権限テーブルのホストおよびユーザー列と照合することにより、各ステートメントのアクセス権限をチェックします。
- ユーザー テーブルの各行の権限は、ホスト列とユーザー列で識別されるアカウントにグローバルに適用されます。
- db、tables_priv、columns_priv、および procs_priv テーブルの一致するレコードの権限は、特定の権限テーブルの名前で識別されるレベルで適用されます。
たとえば、db テーブル レコードの権限は、レコードで指定されたデータベースに適用されますが、他のデータベースには適用されません。 MySQL のインストール プロセスにより、許可テーブルが作成されます。
- 付与テーブルは MyISAM ストレージ エンジンを使用します。
- MyISAM は確実に利用できます。
権限の変更の実施
サーバーは、起動シーケンス中に許可テーブルをメモリに読み取り、メモリ内のコピーを使用してクライアント アクセスをチェックします。サーバーは、次の条件下で付与テーブルのメモリ内コピーを更新します:
- CREATE USER、GRANT、REVOKE、SET PASSWORD などのアカウント管理ステートメントを発行して、ユーザー アカウントを変更します。
- FLUSH PRIVILEGES ステートメントを発行するか、mysqladmin flush-privileges または mysqladmin reload コマンドを実行して、テーブルを明示的にリロードします。
次の理由により、付与テーブルを直接変更することは避けてください:
- アカウント管理ステートメントの構文は、明確でわかりやすいように設計されています。
- アカウント管理ステートメントに誤りがあると、ステートメントは失敗し、設定は変更されません。
- 付与テーブルを直接変更する際にミスをすると、すべてのユーザーがシステムから締め出される可能性があります。
変更が適用される時期
- グローバル権限とパスワードの変更は、そのアカウントの以降の接続にのみ適用されます。
- データベース レベルの権限に対する変更は、クライアントの次の USE db_name ステートメントの後に適用されます。
- テーブルとルーチンの権限に対する変更はすぐに適用されます。
アカウント権限の取り消し
REVOKE ステートメントを使用して、特定の SQL ステートメント権限を取り消します。
REVOKE DELETE, INSERT, UPDATE ON world_innodb.* FROM 'Amon'@'localhost';
アカウントから特権を取り消すには、REVOKE ステートメントを使用します。ユーザーの必要なアクセス権の削減など、さまざまな理由で特権を取り消すことを選択できます。 REVOKE ステートメントの構文には、次の句があります:
- 取り消し キーワード:取り消す権限のリストを指定します。
- オン 句:権限が取り消されるレベルを示します。
- から 句:アカウント名を指定します。
上記の例では、Amon が world_innodb データベースに対する SELECT、DELETE、INSERT、および UPDATE 権限を持っていると仮定していますが、アカウントを変更して、彼が SELECT アクセスのみを持つようにしたいと考えています。最初の例は、彼が変更を行うことを可能にする特権を取り消します。
他のユーザーに権限を付与する権限を取り消すには:
REVOKE GRANT OPTION ON world_innodb.* FROM 'Jan'@'localhost';
上記の例では、Jan のアカウントから GRANT OPTION 権限を取り消すことにより、world_innodb データベースに対して彼が保持している権限を他のユーザーに付与する権限を Jan が取り消すことができます。
他のユーザーへの権限の付与を含め、すべての権限を取り消すには:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'Sasha'@'localhost';
上記の例では、Sasha のアカウントから ALL PRIVILEGES と GRANT OPTION を取り消すことにより、Sasha のアカウントが保持するすべての特権を (任意のレベルで) 取り消します。
注意 :REVOKE を発行する前に SHOW GRANTS ステートメントを使用して、取り消す権限を決定し、後で再度結果を確認します。MySQL ユーザー管理の初心者向けガイドMySQL プラガブル認証について