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. 【Rails】modelを作成する
  2. 起動時の設定をカスタムする【Blender】
  3. 【Rails】selectメソッドで特定の条件を満たす要素を取得する
  4. git add -p でファイルの一部をコミットする【Git】
  5. 【WPテーマ自作】UnderScoresの導入

カレンダー

2023年12月
 123
45678910
11121314151617
18192021222324
25262728293031

最近の記事

  1. Ruby on Rails

    【Rails】railsでIndex name ‘xxx’…
  2. Blender

    起動時の設定をカスタムする【Blender】
  3. Blender

    【UE4】用語備忘録メモ
  4. HTML&CSS

    【CSS】おしゃれなラジオボタンを作る
  5. Blender

    【Blender】起動時に強制終了してしまう問題
PAGE TOP