LoginSignup
1
1

More than 1 year has passed since last update.

SQLの学習用にデータベースを作成してみる。(その1)ユーザーとロールの作成

Last updated at Posted at 2022-03-05

はじめに

 初歩的なSQLコマンドをまとめてみました。で基本的なSQLコマンドを自分なりに整理してみたけれども、ちょこちょこ間違えてるところもあったし、SQLの理解を深めるにはやはりデータベースを作って回数こなさないとね。
というわけで、自宅のMacにMySQLを入れてデータベースを作っていきます。
 単なる学習目的だとなかなか興味が湧かず続かないので、ボートレース競技を題材に簡単なデータベースの作成です。
 訓練所では、そろそろ求職活動も始まり、指名求人の来ないオッチャンとしては、就職にしくじった時のためにも、データベース作成の最終目標を機械学習で予想データを出すところまでもって行きたいところです、ガッポガッポといきたいところです。

開発環境は
・macOS Monterey (12.2.1)
・MacBookPro (2019)
・VSCode (1.64.2) 拡張機能:MySQL (v0.4.1),Python (v2022.0.1814523869)他
・Python (3.9.7)
です。

今回のお品書き

  1. MySQLのインストール
  2. データベースの作成
  3. データベースのユーザー作成
    3-1. ユーザーの作成
    3-2. ロールの作成
    3-3. 権限の作成
    3-4. ロールの割り当て

となっております。

1.MySQLのインストール

 公式サイトからインストーラーをダウンロードしてもいいんですけど、最近はHomebrewでインストールってのが多いみたいなので、右にならえでbrewです。

Macターミナル
samisnotmaydog@MacBook ~ % brew install mysql 

By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

(途中省略)

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done! 

インストールとアンインストール繰り返してたりするので、ちょっと再現が入ってますが、確かこんな感じだったとおもいます。

 MySQLを起動します。起動はbrew services start mysqlでもmysql.server startでもできるみたいです。違いはなんなんでしょうか?調べておきます。
と思ったらありました貼っておきます、ありがたいです。

Macの再起動後にMySQLが起動するかしないかの違いみたいですね。

では、brew services start mysqlで起動させていきます。
停止させるときは brew services stop mysql ですね、解りやすいですね。

Macターミナル
samisnotmaydog@MacBook ~ % brew services start mysql
==> Successfully started `mysql` (label: homebrew.mxcl.mysql)
samisnotmaydog@MacBook ~ % mysql -u root -p
Enter password: 

ここからは、そのままターミナルでの作業ですが、MySQLに入っていきます。

MySQL
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.28 Homebrew

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SELECT VERSION();
+-----------+
| version() |
+-----------+
| 8.0.28    |
+-----------+
1 row in set (0.00 sec)

  バージョンは8.0.28でした。

 VScodeにはMySQLの拡張機能を入れてあるのですが、訓練所のWindows+XAMPPではうまいこと接続できていたのですが、今回は接続ができませんでした。
 原因は認証形式の違いによるとのことなので、設定を変えていきます。

を参考にしました。助かりました。
 では、認証方法を変更して、VSCodeでもMySQLに接続できるようにしておきます。

MySQL
mysql> use mysql
Database changed
mysql> SELECT user, plugin FROM user;
+------------------+-----------------------+
| user             | plugin                |
+------------------+-----------------------+
| mysql.infoschema | caching_sha2_password |
| mysql.session    | caching_sha2_password |
| mysql.sys        | caching_sha2_password |
| root             | caching_sha2_password |
+------------------+-----------------------+
4 rows in set (0.00 sec)

mysql> ALTER USER 'root'@'localhost'
    ->   IDENTIFIED WITH mysql_native_password
    ->   BY 'チョメチョメ';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT user, plugin FROM user;
+------------------+-----------------------+
| user             | plugin                |
+------------------+-----------------------+
| mysql.infoschema | caching_sha2_password |
| mysql.session    | caching_sha2_password |
| mysql.sys        | caching_sha2_password |
| root             | mysql_native_password |
+------------------+-----------------------+
4 rows in set (0.00 sec)

 ユーザー認証をパスワード認証にしたら,VSCodeでもログインできました。
今回はこのままターミナルで作業を続けます。

 ちなみに、チョメチョメはこうゆう意味(by wikipedia)です、昭和なオヤジなもんでスイマセン。

2.データベースの作成

 では、データベースを作ります、名前は 'boatraceDB' です。

MySQL
mysql> CREATE DATABASE boatraceDB;
Query OK, 1 row affected (0.01 sec)

mysql> SHOW databases;
+--------------------+
| Database           |
+--------------------+
| boatraceDB         |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

 出来てますね、まだ簡単です。

3.データベースのユーザー作成

 訓練所ではデータベースの操作は 'root' で作業を進めていましたが、今回は別のユーザーを作って作業していきます。
単純にユーザーを作ればいいのですが、それだけでは面白くないので、ユーザーに直接権限を設定せずにロールを作成して、ユーザーにロールを付与する2段構えにトライします。

MySQL 8.0 リファレンスマニュアル / GRANT ステートメント と

の記事を参考に作成していきます、ありがとうございます。

3-1.ユーザーの作成

 ユーザー名は 'sam' で、パスワード認証にします。
認証方式はコレしかまだ理解できません。

MySQL
mysql> CREATE USER sam IDENTIFIED BY 'チョメチョメ';
Query OK, 0 rows affected (0.01 sec)

3-2.ロールの作成

 競艇データベースの作業用の権限を 'boatdb_dev' と名付けます。

MySQL
mysql> CREATE ROLE boatdb_dev;
Query OK, 0 rows affected (0.01 sec)

 まだロール(役割)を割り当てただけで、具体的な役割データベースに対して許可されている操作や出来ることは、なにも決められていません。

3-3.権限の作成

 GRANT文で作成しますが、

MySQL
/*GRANT 要るとこだけ*/ 
GRANT priv_type [(column_list)][, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    TO user_or_role [, user_or_role] ...

 色々細かに設定できますが、今回は掘り下げるの別の機会として。。。とりあえずデータベース管理以外の権限を放り込んであります。

MySQL
mysql> GRANT ALTER,CREATE,CREATE VIEW,DELETE,DROP,EVENT,EXECUTE
,INDEX,INSERT,LOCK TABLES,REFERENCES,SELECT,SHOW VIEW,TRIGGER,UPDATE 
ON boatraceDB.* TO boatdb_dev;
Query OK, 0 rows affected (0.00 sec)

 'データベース名.*' なのは見逃してました、何回もエラーって言われました。
そんな怒らんでもエエのに。

3-4.ロールの割り当て

 ユーザー' sam' に 'boatdb_dev' ロールを付与します。

MySQL
mysql> GRANT boatdb_dev TO sam;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM mysql.role_edges;
+-----------+------------+---------+---------+-------------------+
| FROM_HOST | FROM_USER  | TO_HOST | TO_USER | WITH_ADMIN_OPTION |
+-----------+------------+---------+---------+-------------------+
| %         | boatdb_dev | %       | sam     | N                 |
+-----------+------------+---------+---------+-------------------+
1 row in set (0.00 sec)

確認できました。

 今日はここまでにします。

MySQL
mysql> exit;
Bye
samisnotmaydog@MacBook ~ % brew services stop mysql
Stopping `mysql`... (might take a while)
==> Successfully stopped `mysql` (label: homebrew.mxcl.mysql)
samisnotmaydog@MacBook ~ % 

次回に続く

 時間を作って、最終目標の予想までどのくらい時間が掛かるか解りませんが、コツコツと続けていければと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1