前回記事:便利な公式ツールMySQL Workbenchの使い方と日本語化方法ではMySQL Workbenchの基本的な使い方についてご紹介しました。今回は使用ツールをMySQL Command Line Clientに戻し、データベースに接続するためのユーザを新規作成&削除する方法をご紹介したいと思います。
目次
1.1 ユーザ作成のためのコマンド
1.2 コマンド実行結果
2.1 ユーザ一覧を表示するコマンド
2.2 コマンド実行結果
3.1 ユーザの権限を変更するコマンド
3.2 設定できる権限一覧
3.3 コマンド実行結果
4.1 指定したユーザの権限を確認するコマンド
4.2 コマンド実行結果
1.新規ユーザの作成
1.1 ユーザ作成のためのコマンド
新しくユーザを作成するためには、CREATE USER文を使用します。
CREATE USER 'ユーザ名'@'ホスト名' IDENTIFIED BY 'パスワード';
ユーザ名、パスワードには、任意の文字列を設定して下さい。ホスト名には、MySQLへ接続するホストを指定して下さい。ホスト名の代わりにIPアドレスやlocalhostを指定することも可能です。
<注意点>
・ユーザ名およびホスト名については、特殊文字を使用しない場合はシングルクォーテーションを省略することができます。
・ユーザ名の最大文字数は半角32文字まで、ホスト名は半角60文字まで対応しています。
・CREATE USERに続く設定をカンマで区切って並べることで、複数のユーザをまとめて作成することもできます。
1.2 コマンド実行結果
3つのユーザを一括で作成するCREATE USER文を実行すると、次のようになります。
2.ユーザ一覧の表示
2.1 ユーザ一覧を表示するコマンド
作成したユーザを確認するには、SELECT文を使用します。
SELECT user, host FROM mysql.user;
これは、デフォルトで存在する「mysql」というデータベース上に存在する「user」というテーブルの中から、「user」と「host」という項目を選択するというSQL文です。「user」テーブルには他にも列項目があり、計45項目あります。
その他の項目を確認したい場合は、次のSQL文を実行してみて下さい。「COLUMNS」とは、列名を表しています。
SHOW COLUMNS FROM mysql.user;
2.2 コマンド実行結果
ユーザ一覧を表示するSELECT文を実行すると、次のようになります。
なお今回は、ユーザ名の昇順でソートを掛ける指定「ORDER BY」を追加しています。
3.作成したユーザに権限を付与・編集する
3.1 ユーザの権限を変更するコマンド
CREATE USER文でユーザを作成した場合、初期設定では権限「なし」の状態です。そこでGRANT文を使って、権限を付与します。
GRANT [権限] ON [適用対象のデータベース].[適用対象のテーブル] TO 'ユーザ名'@'ホスト名' IDENTIFIED BY 'パスワード';
FLUSH PRIVILEGES;
[権限]の部分には、設定したい権限を列挙します。指定できる権限の種類については、次の項目でご紹介したいと思います。
[適用対象の~]には、権限を適用する対象を指定します。例えば適用の単位に「データベース」を指定できる権限であれば、データベース名を指定して設定することができます。「全範囲(グローバル)」を指定したい場合は、「*.*」と指定します。
FLUSH PRIVILEGESを実行することで、権限の変更をデータベースに反映しています。
なお指定したユーザがデータベース上に存在しない場合、新たにユーザを作成した上で権限を付与します。そのためCREATE USER文を使用せずに、初めからGRANT文を用いてユーザの作成を行う場合もあります。
GRANT文で指定できる権限の一部を、一覧表にしてみました。
<MySQL Serverver 5.7で設定可能な権限(抜粋)>
コマンド | 適用単位 | 設定内容 |
---|---|---|
ALL | - | GRANT OPTION(権限の付与)以外の全てを許可する |
ALTER | G, D, T | ALTER TABLE(テーブルの変更)の使用を許可する |
ALTER ROUTINE | G, D, P | ストアドルーチンの変更・削除を許可する |
CREATE | G, D, T | データベースとテーブルの作成を許可する |
CREATE ROUTINE | G, D | ストアドルーチンの作成を許可する |
CREATE TABLESPACE | G | テーブルスペースとログファイルグループの作成を許可する |
CREATE TEMPORARY TABLES | G, D | 一時テーブル作成の使用を許可する |
CREATE USER | G | ユーザの作成・変更・削除を許可する |
CREATE VIEW | G, D, T | ビューの作成や変更を許可する |
DELETE | G, D, T | DELETE文の使用を許可する |
DROP | G, D, T | DROP文の使用を許可する |
EVENT | G, D | イベントスケジューラのイベント作成を許可する |
EXECUTE | G, D, T | ストアドルーチンの実行を許可する |
GRANT OPTION | G, D, P | 権限の付与を許可する |
INDEX | G, D, T | インデックスの作成と削除を許可する |
INSERT | G, D, T, C | INSERT文の使用を許可する |
LOCK TABLES | G, D | SELECT権限を持つテーブルのロックを許可する |
PROCESS | G | プロセスリストの表示を許可する |
RELOAD | G | FLUSHの使用を許可する |
SELECT | G, D, T, C | SELECT文の使用を許可する |
SHOW DATABASES | G | SHOW DATABASEで全データベースの表示を許可する |
SHUTDOWN | G, D, T | mysqladmin shutdownの使用を許可する |
TRIGGER | G, D, T | トリガの作成・削除を許可する |
UPDATE | G, D, T, C | UPDATE文の使用を許可する |
USAGE | - | 「権限なし」を設定する |
なおこの一覧は全てではなく、かつ日本語化の際に一部説明を簡略化している部分があります。
詳しくは公式サイトをご確認下さい。
【MySQL 5.7 Reference Manual - GRANT Syntax】
https://dev.mysql.com/doc/refman/5.7/en/grant.html
なお上表にある「適用単位」とは、その権限が適用される単位を表しており、その単位で権限を適用する範囲を指定することができます。各略号が表す範囲は、次の通りです。
<適用単位の意味>
適用単位の略号 | 適用単位 | 概要 |
---|---|---|
G | Global | 全てのデータベースに適用可能 |
D | Database | データベースを指定して適用可能 |
T | Table | テーブルを指定して適用可能 |
C | Column | 特定のカラムを指定して適用可能 |
P | Procedure | 特定のストアドルーチン(Procedure/Function)を指定して適用可能 |
前項で作成した3つのユーザーに、それぞれ「全て」「hogehogeデータベースの閲覧(SELECT)のみ」「hogehogeデータベースへのデータ追加(INSERT)と更新(UPDATE)のみ」を許可する権限を付与したい場合、次のように実行します。
4.ユーザの権限を確認する
4.1 指定したユーザの権限を確認するコマンド
あるユーザに設定した権限を確認する場合、SHOW GRANTS文を使います。
SHOW GRANTS FOR 'ユーザ名'@'ホスト名';
なお次のようにユーザ名の指定を省略した場合は、データベースに現在接続しているユーザの権限が表示されます。
SHOW GRANTS;
4.2 コマンド実行結果
3つのユーザの権限を表示すると、次のようになります。
5.ユーザの権限を削除する
5.1 ユーザの権限を削除するコマンド
GRANT文で設定したユーザの権限を削除するには、REVOKE文を使います。
REVOKE [権限] ON [適用対象のデータベース].[適用対象のテーブル] FROM 'ユーザ名'@'ホスト名';
FLUSH PRIVILEGES;
GRANT文と同様にFLUSH PRIVILEGESを実行することで、権限の変更を反映しています。
5.2 コマンド実行結果
user01から「全て」の権限を、user03からINSERT文の実行権限を削除するコマンドは、次のようになります。
実行すると、user01は「権限なし」になり、user03にはUPDATE文の実行権限のみが残りました。
6.ユーザの削除
6.1 ユーザを削除するコマンド
不要になったユーザを削除する場合、DROP USER文を使います。
DROP USER 'ユーザ名'@'ホスト名';
ユーザ作成時と同様に、複数のユーザ名をカンマで区切って一括で指定することも可能です。
6.2 コマンド実行結果
3つのユーザを一括で作成するDROP USER文を実行すると、次のようになります。
7.まとめ
一般的にGRANTで直接ユーザを作成することが多いようなのでCREATE USER文を使用する機会は少ないかもしれませんが、一応存在を覚えておくと便利かもしれません。
次回はデータベースの新規作成についてご紹介したいと思います。よければ合わせてご覧下さい。
当サイトプロエンジニアのコンサルタントが厳選したおすすめのフリーランス案件特集はこちら
特集ページから案件への応募も可能です!
実際にフリーランスエンジニアとして活躍されている方のインタビューはこちら