MySQL ユーザーの作成
データベースをインストールすると最初に全ての権限を持ったrootユーザー(管理者権限)が自動で作成されます。
自分だけでデータベースを使用する時にはそれでも問題ありませんが、データベースソフトは、性質上複数のユーザーの利用が一般的です。その場合に全てのユーザーがrootユーザーとしてアクセスしていると誰もが危険な命令を発行することも可能になります。例えば、データベースの削除です。
こういった事を未然に防ぐためにも管理者以外のユーザーは実行権限を制限すべきです。
ユーザーの作成
先ずは、現在登録されているユーザーの一覧を出力しましょう。
1 |
SELECT user FROM mysql.user; |
ユーザー作成のコマンドは、
1 |
CREATE USER 'ユーザー名' IDENTIFIED BY 'パスワード'; |
例として次のユーザーを作成します。
ユーザー名:genjin
パスワード:pass1234
1 |
CREATE USER 'genjin' IDENTIFIED BY 'pass1234'; |
無事に作成されたら、「Query OK,~」と出力されます。
登録されているユーザーの一覧をもう一度出力しましょう。
1 |
SELECT user FROM mysql.user; |
今度は登録したユーザーとhostを出力しましょう。
1 |
SELECT user, host FROM mysql.user; |
作成したユーザーのhostには、「%」が表示されています。
「%」は、どこからでもアクセスできると言う意味です。
それに比べて「root」は、localhostになっています。
rootは、localhostでないとアクセスできないんですね(他のPCからの接続ができない)。
アクセスするホストを限定する場合はhostも指定しましょう。
1 |
CREATE USER 'ユーザー名'@'ホスト名' IDENTIFIED BY 'パスワード'; |
以下のユーザーでlocalhostのアクセスに限定したユーザーを作成しましょう
ユーザー名:genjin_local
パスワード:pass1234_local
1 |
CREATE USER 'genjin_local'@'localhost' IDENTIFIED BY 'pass1234_local'; |
もう一度、登録したユーザーとhostを出力して確認しましょう。
1 |
SELECT user, host FROM mysql.user; |
ユーザーの権限付与
ユーザーを作成しただけでは、まだ何もできません。
ユーザーを作成したら次は権限を付与しなければなりません。
権限付与は、
1 |
GRANT 権限 ON データベース名.テーブル名 TO 'ユーザー名'; |
ユーザー名に対してデータベースのテーブルに対する権限を付与する、という意味です。
具体的なクエリは次のようになります(データベース名は、「testDB」とします)。
1 |
GRANT ALL ON testDB.* TO 'genjin'; |
「*」は全てのテーブルと言う意味です。
これで指定したデータベースに全てのテーブルに対して権限を付与したことになります。
「ALL ON」の部分は、全ての権限を有効にすると言う意味です。
「SELECT, INSERT, UPDATE, DELETE ON」にした場合、新規・更新・削除・読み込みが出来るようになります。
このように権限設定では、以下を制御できます。
①どのデータベースに対しての権限
②どのテーブルに対しての権限
③どんな命令を実行できるか
権限を確認するには、「SHOW GRANTS」を実行します。
1 |
SHOW GRANTS FOR 'ユーザー名'; |
1 |
SHOW GRANTS FOR 'genjin'; |
権限を剥奪する時は、「REVOKE」を使います。
1 |
REVOKE 権限 ON データベース名.テーブル名 FROM 'ユーザー名'; |
1 |
REVOKE ALL ON testDB.* FROM 'genjin'; |
権限を出力しましょう。
1 |
SHOW GRANTS FOR 'genjin'; |
ユーザーの削除
ユーザーの削除は、
1 |
DROP USER 'ユーザー名' |
先ほど作成したユーザーを削除しましょう
1 |
DROP USER 'genjin_local' |
削除されているか確認しましょう
1 |
SELECT user, host FROM mysql.user; |