はじめに
実働しているシステムでroot
を使っている人もいるかと思います。しかし、普通に考えてセキュリティ的にはよろしくないですよね。
かくゆう私もこれまで「めんどくさい」、「そんなことまで考えている余裕がない」っていうので、そのままroot
を使う形でシステムを作っていました。
脱root
ということでこの記事を書きたいと思います。
決してroot
を使わないということではなく、システムとroot
を切り離すということをお間違え無く。
ユーザの作成
まずは、root
でMySQLにログインして下さい。
いつも通りのmysql -u root -p
です。
ユーザ名をuser
、パスワードをpassword
とします。
その場合、ユーザの作成は以下のコードになります。
CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
次のコードを実行してユーザが作成されているか確認しましょう。
SELECT User, Host FROM mysql.user;
データベースの作成
もしも、使用するデータベースが既に作成されているのならば、このステップは必要ありません。
作成するデータベースをdb
とします。
実行するコードは以下です。
CREATE DATABASE `db`;
ユーザの権限の変更
今のままでは、作成したユーザはどのデータベースにもアクセス出来ません。データベースにアクセス出来る様にしましょう。
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, CREATE VIEW, SHOW VIEW ON `db`.* TO 'user'@'localhost';
これで、db
内ではSELECT
、INSERT
、DELETE
、CREATE TABLE
、CREATE VIEW
、SHOW VIEW
が出来る様になりました。
もしも、特定のテーブルにおいて権限を外したい場合は、
REVOKE 権限 ON `db`.`テーブル名` TO 'user'@'localhost';
です。
権限とテーブル名をそれぞれ置き換えて使って下さい。
権限の確認のコードは以下です。
SHOW GRANTS FOR 'user'@'localhost';
追記
もしも、外部キーを使うのであれば、権限にREFERENCES
が必要です。
GRANT REFERENCES ON `db`.* TO 'user'@'localhost';
このコードで外部キーに関する権限も追加出来ます。
権限の削除と同様、追加する権限のみを書けば大丈夫です。
さいごに
ここまで終われば、root
からログアウトして、user
でログインし直して、一通りの作業が出来るかどうかの確認をお願いします。
ただものが作れただけでなく、少しずつ細かいところにも気を配っていこうと思っています。