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. 【Blender】zip版のBlenderをBlender Launcherに移…
  2. 【Rails】selectメソッドで特定の条件を満たす要素を取得する
  3. 【Blender】拡張機能(アドオン)の基本的な使い方
  4. 【Blender】Bumpを使用した質感表現の方法
  5. 【Blender】起動時に強制終了してしまう問題

カレンダー

2024年10月
 123456
78910111213
14151617181920
21222324252627
28293031  

最近の記事

  1. WordPress

    【WPテーマ自作】UnderScoresの導入
  2. gitでファイル変更の一部をコミットする

    git

    git add -p でファイルの一部をコミットする【Git】
  3. 慣れれば3分!Bumpノードを使用した質感表現の方法

    Blender

    【Blender】Bumpを使用した質感表現の方法
  4. Blender

    起動時の設定をカスタムする【Blender】
  5. Ruby on Rails

    【Rails】selectメソッドで特定の条件を満たす要素を取得する
PAGE TOP