MySQL

【MySQL】mysqlで新しくユーザーを追加する

環境

os: centos7
RailsApp on Vagrant
mysql: 5.7.32

結論

ローカル環境だけならこの3ステップでOK

ユーザー作成

create user 'myapp'@'localhost' IDENTIFIED BY 'password'`;

権限設定

grant all on *.* to my_app@localhost;

設定反映

flush privileges;

概要

Vagrant上にRails環境を作り
db:create:all(開発用のデータベース作成)したところ
権限エラーで弾かれた、、、

確認したところ
VagrantFileで指定したホスト名 がMySQLのユーザー名として使われている

なので
同じ名前のMySQLユーザーを作成する必要がありそう

コマンド実行した際のログが以下

[vagrant@my_app app]$ bundle exec rake db:create:all

Start creating production like data
This task only modifies local databases. my_app_development is on a remote host.
This task only modifies local databases. my_app_development is on a remote host.
This task only modifies local databases. my_app_test is on a remote host.
Access denied for user 'my_app'@'localhost' (using password: NO)
Couldn't create 'my_app_production' database. Please check your configuration.
rake aborted!

Mysql2::Error: Access denied for user 'my_app'@'localhost' (using password: NO)
/home/vagrant/.rbenv/versions/2.5.5/bin/bundle:23:in `load'
/home/vagrant/.rbenv/versions/2.5.5/bin/bundle:23:in `<main>'
Tasks: TOP => db:create:all
(See full trace by running task with --trace)

ユーザーを作成する

ますは、MySQLにログインして新しくユーザーを作成します

Vagrant上でのユーザー名は、`my_app` になっているので
my_app@localhost というユーザーを新しく作成します!

MySQLにログイン

今回はrootユーザーでログインします。

mysql -u root -p

dbでmysqlを指定

ログインしたら、使用するデータベースを宣言します。
MySQLのユーザー情報は
mysqlという名前のデータベースに格納されています。

use mysql

ユーザーを作成

userテーブルが、MySQLのユーザー情報を管理しているテーブルなので
そこに新しいユーザーのレコードを作成します。

CREATE user 'myapp'@'localhost' IDENTIFIED BY 'password';

ユーザー名は、’ユーザー名’@’ホスト名’ の形で記述します。
@の前後をシングルコロンで囲んであげます。

IDENTIFIED BY でパスワードを指定できるので
こちらもシングルコロンで囲み、設定したいパスワードを入力します。
今回は、自分のローカルマシンでしか使わないので、passwordにしました。

ユーザーに権限を設定する

作成したばかりのユーザーは
dbを操作する権限を持っていないので
権限を与えてあげる必要があります。

権限を確認

このコマンドで、ユーザーに与えられている権限を確認することができます。

SHOW GRANTS FOR my_app@localhost;

初期の権限はこんな感じ

mysql> SHOW GRANTS FOR my_app@localhost;
+----------------------------------------------+
| Grants for my_app@localhost                |
+----------------------------------------------+
| GRANT USAGE ON *.* TO 'my_app'@'localhost' |
+----------------------------------------------+
1 row in set (0.00 sec)

GRANT USAGE ON *.* TO ‘my_app’@’localhost’
となっていて、USAGE は何も権限を持っていない状態です。

ON *.* の *.* はスコープを表していて
これ(*.*)はグローバルレベルになります

スコープは
・グローバルレベル
・データベースレベル
・テーブルレベル
・カラムレベル
から選ぶことができます
今回はローカルでしか使わないため、グローバルですべての権限を設定します。

本番環境や、ステージング環境でユーザーを作成する場合には
適切な権限設定をしましょう。

グローバルの権限を与える

このコマンドで、グローバルの権限を付与します

GRANT all ON *.* TO my_app@localhost;

再度権限を確認してみます

SHOW GRANTS FOR my_app@localhost;
mysql> SHOW GRANTS FOR my_app@localhost;
+-------------------------------------------------------+
| Grants for my_app@localhost                         |
+-------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'my_app'@'localhost' |
+-------------------------------------------------------+
1 row in set (0.00 sec)

GRANT ALL PRIVILEGES ON *.* となっているので
ちゃんと設定されましたね!

設定を反映

権限を設定したら、FLUSH PRIVILEGES で権限設定をDBに反映します。
もしくは、MySQLを再起動させてもOKです。

FLUSH PRIVILEGES;

MySQLを再起動

設定の反映も行いましたが、念のためMySQLを再起動しておきましょう。
sudo は管理者権限でコマンドを実行する時に使います。
もし、管理者アカウントでOSを操作している場合は、sudoはつけなくて大丈夫です。

sudo systemctl restart mysqld.service

以上の手順でユーザーを作成し
再度 rake db:create を実行したところ、上手くデータベースを作成することができました!

こういった環境構築に付随してくる部分は
たまに抜け落ちてしまうので、今回の記事を備忘録代わりに
また環境構築を行う時に嵌らないようにしたいと思います。

同じような人にとって少しでも参考になりますように!

ピックアップ記事

  1. 【C98】夏コミ申し込みました。
  2. 【C97】冬コミ受かってました
  3. 【C97】冬コミ申し込みました!
  4. 【WPテーマ自作】UnderScoresの導入
  5. 【WPテーマ自作】ローカル環境でWP開発ができる「Local」の導入

カレンダー

2021年1月
 123
45678910
11121314151617
18192021222324
25262728293031

最近の記事

  1. CharattDB

    【CharattDB】勉強がてらアプリを作ってみる
  2. その他

    WordPressに移行してみました
  3. railsをproductionモードで実行する

    Ruby on Rails

    【Rails】railsをproductionモードで実行する
  4. 【Rails】オブジェクトの中身をログに出力する

    Ruby on Rails

    【Rails】オブジェクトの中身をログに出力する
  5. 同人イベント

    【C97】冬コミ受かってました
PAGE TOP