ユーザー(アカウント)、ロール管理
MySQL ではユーザーとロールは別々に管理されます。MySQL のリファレンスにおける解説ではロールとはユーザー名とデータベース操作権限があるものとあります。ユーザーとロールの概念が混在しているようです。
MySQL では、ユーザーごとにデータベースの操作権限を与えることができます。しかし、データベースの接続認証はロールで行いますので、API といった外部からデータベースに接続するような構成をお考えのときはロールを設定しておかなければなりません。
操作権限を設定したロールを作成し、ユーザーにそのロールを設定することができます。そのことでデータベースへの接続にはロールを介して行います。
以下はユーザーと作成とロールの作成と設定についてです。
MySQL ではユーザーを CREATE USER で追加し、そのユーザーに権限を与えることができます。
ロールは CREATE ROLE で追加作成することができ、そのロールに操作権限を与えることができます。
さらにユーザーにロールを含むことでユーザーはロールに設定された操作権限を継承することができます。
MySQL ではユーザーはアカウントとも表記されています。
特にロールを意識しなければならないのは、データベースへの接続認証はロール
で管理することです。
データ操作における認証や MySQL との接続を管理する際にはロールがどのような役割をもっているかを知っておく必要があります。
ページ内 Index
データベースへの接続とデータ操作における認証はロールで管理します。ユーザーに似ていますが、OS上のユーザーとは別として扱います。
- ad -
スーパーユーザー root について
多くの場合 MySQL の初期の管理ユーザーはroot
に設定されています。root
はスーパーユーザーとも呼ばれます。
このroot
ユーザーは MySQL のインストール時に OS 上の管理ユーザーでもあります。そのため、OS の端末からsudo myql
コマンドでログインができます。
パスワードはデフォルトインストールでは必要ありません。
初期はroot
で MySQL の設定を行っていくことになりますが、公のサーバーとして運用するなら mysql_secure_installation
によってセキュリティー設定を変更した方がよいでしょう。
mysql_secure_installation
の設定でroot
による接続はローカルからのみで MySQL にログインするにはパスワードを必要とするようにします。
- ad -
ユーザー(アカウント)管理
MySQL ではユーザー管理とロール管理は別になっています。ユーザーにロールを含めることでロールのデータベースの操作権限を継承することができます。
ユーザーごとにも操作権限を与えることができます。
ユーザーの確認
MySQL に登録されているユーザを確認するには以下のようにします。
上記の例ではユーザーのプロパティがすべて表示されます。
ユーザー名とホスト名のみを抽出するには以下のようにします。
ユーザーの追加
MySQL におけるユーザーとは MySQL サーバーにログインしデータベース操作を行う抽象的な人のことです。 MySQL ではアカウントとも表記されています。
スーパーユーザーとしてデフォルトでroot
ユーザーがありますが、さらにCREATE USER
でユーザーの追加行うことができます。
まずはスーパーユーザーroot
で mysql にログインします。
ユーザーの追加は CREATE USER クエリーを実行します。
ユーザー名は 'user_name'、ユーザーの接続元は 'localhost' まで許可しています。パスワードは '5v().B5y4wpT' です。
'localhost' はユーザーの許可される接続元のホストの範囲を示します。'%' でネットワークを通した方法でもローカルからでも接続できます。'localhost' は同一コンピュータ内からの接続のみを許可します。
接続元ホストを省略すると '%' に設定されます。
パスワードは強度に従って決めます。ここでは、パスワードは8文字以上で強度は MEDIUM としています。パスワードの強度の確認は以下のようにします。
パスワード強度の確認
パスワードは強度の設定に合わせます。パスワードの強度が設定に準拠していないと次のようなエラーが出ます。
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
パスワードの強度を確認するには以下のようなクエリーを実行します。
mysql> SHOW VARIABLES LIKE 'validate_password%';
+-------------------------------------------------+--------+
| Variable_name | Value |
+-------------------------------------------------+--------+
| validate_password.changed_characters_percentage | 0 |
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | MEDIUM |
| validate_password.special_char_count | 1 |
+-------------------------------------------------+--------+
8 rows in set (0.01 sec)
当方のインストール環境でのデフォルトの設定では、パスワードは8文字以上で強度は MEDIUM でした。
MEDIUM はアルファベットの大文字、小文字、数字、記号を含んでいる必要があります。
ユーザー名とホスト名の変更
以下のような RENAME USER クエリーによってユーザー名とホスト名を変更することができます。
パスワードの変更
パスワードの変更は以下のような構文で行います。
またはカレントユーザーのパスワードの変更は以下のような構文になります。
変更内容を反映するにはFLUSH PRIVILEGES
クエリーを実行します。
ユーザーの削除
ユーザーの削除は DROP USER クエリーを使用します。構文は以下です。
ユーザーは複数を指定することができます。
ユーザーの削除を行うとその権限についても削除されます。
ユーザー(アカウント)の操作権限
MySQL ではユーザーごとにデータベースの操作権限を設定します。ユーザーはアカウントも呼ばれ、ユーザー名とパスワードで MySQL にログイン後に操作権限に基づいて出来ることが制限されます。
データベースにはロールという設定があります。ロールはロール名に操作権限を設定するもので、ユーザーにロールを設定するとそのロールの操作権限を継承します。
個々のユーザーごとに操作権限を設定しなくてもロールの切り替えで操作権限を変更することもできます。
ユーザーの権限の設定
ユーザーごとのデータベースやテーブルに対する権限の設定には GRANT 文を使用します。
権限設定の構文は以下のようになっています。
PRIVILEGE は、 ALL PRIVILEGES
、ALL
または CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD
クエリーからの指定です。
ALL PRIVILEGES
は CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD クエリーのすべての指定です。
または、CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD
クエリーから選択による組み合わせが可能です。
CREATE, ALTER, DROP はテーブルの作成、変更、削除です。
INSERT, UPDATE, DELETE, SELECT はデータの新規作成、更新、削除、閲覧です。
REFERENCES は外部キー作成権限。RELOAD はキャッシュをクリアやリロード、テーブルのフラッシュやロックといった FLUSH 操作に関する権限です。
もしも、example ユーザーにすべてのデータベースの全ての操作権限を与えるには以下のようにします。
*.*
はすべてのデータベースの全てのテーブルという指定です。
例えば、example ユーザーは閲覧のみを可能にするには以下のようにします。
ユーザーの追加や権限設定が終わったらFLUSH PRIVILEGES
クエリーを実行します。
このことで即時に追加されたユーザーとその権限が反映されます。
権限設定のクエリーでユーザー登録ができます。
以下のように権限設定と同時にパスワードを指定するとユーザー登録ができます。
MySQL ではユーザーごとに操作権限を設定できます。また、ロールを作成しユーザーにそのロールを含むことで操作権限を設定することもできます。
ユーザー権限の確認
ユーザーに設定した権限を確認するには SHOW GRANTS クエリーを実行します。
操作権限の変更
ユーザーの操作権限の変更は GRANT クエリーで操作内容を指定します。
構文は以下にようになります。
例えば上記で設定した操作権限をSELECT
のみに変更するには以下のようにします。
操作権限の削除
ユーザーから操作権限を削除するには REVOKE クエリーを使用します。
構文は以下にようになります。
priv_type は操作対象でALL
または CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD
クエリーのことです。
[object_type] priv_level は主にデーベースやテーブルの指定です。database.table のように指定し、すべての場合は *.* とします。
user_or_role はユーザー名'username'@'host'
とロール名のことです。
例えば 'example'@'localhost' ユーザーにおいて、すべてのデータベースとテーブルに対してINSERT、UPDATE、DELETE 権限を削除するには以下のようにします。
- ad -
ロールについて
MySQL でのロールは、ロール名にデータベースの操作権限が設定するものです。ユーザー(アカウント)にロールを設定することでユーザーは操作権限を継承します。
例えば以下のように閲覧のみを設定したロールが与えられたユーザーはデータの閲覧のみしかできません。
このように複数のロールに一括してデータベースの操作権限を設定することができます。ロールの操作権限を変更することで簡易にユーザーの権限を変更することができます。