見出し画像

MySQLでのユーザー作成からデータ挿入まで

はじめに

こんにちは、SHIFT の開発部門に所属しているmurasawaです。今期より中途で入社、バックエンド関連の開発を担当しています。

現在、研修でデータベースやRestAPIについて基本的な事から学んでいます。
学んだことをアウトプットし理解を深めていくとともに技術の共有として役に立てば幸いです。

mysql使いはじめの最初のユーザー作成や権限設定などからデータ挿入までの基本黄なことをまとめてみました。間違いがあればコメントいただければ幸いです。

■使用環境(MySQLがインストールされているサーバー)

CentOS7

MySQL 5.7

mysqlにログインする

まず初めにmysqlにログインします。

yum installなどでインストールした場合

mysql -u root -p

でログインできるはずなのですが、passwordがわかりません。
MySQLの初期パスワードは初回起動時に自動的に生成されます。

自動生成されたパスワードは/var/log以下の「mysqld.log」に出力されています。

「mysqld.log」にtemporaryのパスワードが出力されるようになったのは、バージョン5.7からです。
MySQLのClientバージョンで確認するには以下のコマンドを入力します。

[root@localhost ~]# mysql --version
mysql  Ver 14.14 Distrib 5.7.35, for Linux (x86_64) using  EditLine wrapper

私の環境は5.7なので「mysqld.log」でパスワードが確認できます。
初期パスワードを探すのが大変なので、 「grep」で【temporary password】を含む文字列を抽出します。

[root@localhost ~]# less /var/log//mysqld.log | grep "temporary password"
2021-09-16T12:11:13.632924Z 1 [Note] A temporary password is generated for root@localhost: *************

上記の************ がパスワードです

dockerで起動した場合

環境変数MYSQL_ROOT_PASSWORDで指定します。

もしくは起動の際に

docker run -it --name test_mysql -e MYSQL_ROOT_PASSWORD=mysql -d mysql:latest

と指定します。

また、docker-composeで起動する場合には docker-compose.yamlに記述します。

以下の記事が参考になります。
https://qiita.com/TAMIYAN/items/ed9ec892d91e5af962c6

ユーザー作成

mysql -u root -p

でログインしたら次はユーザー作成を行います。

mysql> create user 'test'@'localhost' IDENTIFIED BY 'TEST';
Query OK, 0 rows affected (0.13 sec)

@前半の'test'はユーザー名、後半の'localhost'はホスト名です。

この場合、ローカルホストのみからログインできます。 ホストを追加する場合は後述の権限設定で説明します。
IDENTIFIED BY 後の文字はpasswordで自身で設定できます。

以下コマンドで追加されていることが確認できます。

mysql> select user, host from mysql.user;
| user          | host      |
|---------------|-----------|
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
| test          | localhost |
+---------------+-----------+

作成したユーザーでログインできるようになりました。

root@5f7abd3cebf5:/# mysql -u test -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 29
Server version: 5.7.35 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, 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>

権限設定

ユーザーを作成しただけでは何の権限もなく、データベースにアクセスしたり、読み書きができません。

mysql> use app
ERROR 1044 (42000): Access denied for user 'test'@'localhost' to database 'app'

appは私があらかじめ作っていたデータベースです。
権限がないので拒否されています。

以下コマンドで権限を追加します。

mysql> GRANT ALL PRIVILEGES ON * . * TO 'test'@'localhost';
Query OK, 0 rows affected, 1 warning (0.02 sec)

このコマンドのアスタリスクは、アクセスできるデータベースとテーブルを示しています。
この特定のコマンドを使用すると、ユーザーはすべてのデータベースとテーブルですべてのタスクの読み取り、編集、実行を行うことができます。

この例では、testにデータベース内のすべてへのrootのフルアクセス権を付与していいますが、これは実用的ではなくデータベースのセキュリティを危険にさらす可能性があります。

新しいユーザーに設定する権限を確定したら、必ずすべての権限をリロードしてください。

mysql> FLUSH PRIVILEGES;

特定のデータベースやテーブルへ権限を付与したければ「*.*」部分を「database名.*」や「database名.table名」などに変更してください。

mysql> GRANT ALL PRIVILEGES ON DB_NAME.TABLE_NAME TO 'test'@'localhost';
Query OK, 0 rows affected, 1 warning (0.02 sec)

また、特定のIPアドレスによるアクセスを許可したい場合は下記のように

mysql> GRANT ALL PRIVILEGES ON DB_NAME.TABLE_NAME TO 'test'@'192.168.X.Y' IDENTIFIED BY 'TEST';
Query OK, 0 rows affected, 1 warning (0.02 sec)

ホスト名の変更とpasswordの設定をしてください。
これにより192.168.X.Yより設定したユーザーとpasswordでアクセスできるようになります。

その他の権限設定

上記ではすべての権限を付与しましたが、設定できる権限を確認していきます。 ユーザーが使用できるその他の一般的なアクセス権限一覧を次に示します。

●ALL PRIVILEGES - 指定されたデータベースへフルアクセスができます(データベースを指定しなかった場合、システム全体のグローバルアクセスが可能)。

●CREATE - 新しいテーブルまたはデータベースを作成できる。

●DROP - テーブルまたはデータベースを削除できる。

●DELETE - テーブルから行を削除できる。

●INSERT - テーブルに行を挿入できる。

●SELECT - データベースを読み取ることができる。

●UPDATE - テーブルの行を更新できる。

●GRANT OPTION - 他のユーザーの権限の付与または削除ができる。

例えば、CREATEを付与したければ、

mysql> GRANT CREATE ON DB_NAME.TABLE_NAME TO 'test'@'localhost';

と実行します。 また権限をはく奪したい場合は

mysql> REVOKE UPDATE ON dDB_NAME.TABLE_NAME FROM 'USER_NAME'@'localhost';

と実行します。 ユーザーの現在の権限を確認するには

mysql> SHOW GRANTS FOR 'USER_NAME'@'localhost';

で確認できます。

データベースの作成

作成権限のあるユーザーで

mysql> CREATE DATABASE users;

と実行するとusersというデータベースが作成できます。

mysql> SHOW databases;

で作成されたことが確認できます。

今のままではどのデータベースを使うのかわからないので指定します。

mysql> use users;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

これでusersデータベースが使えるようになりました。

テーブルの作成

次にusersというテーブルを作成してみましょう。

CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `email` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
  `password` varchar(255) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
  `user_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

ENGINEで使用するエンジンを、DEFAULT CHARSE、COLLATEでデフォルトの文字コードを指定できます。

SHOW tables;

でテーブルが作成されたことが確認、

SHOW CLOUMNS FROM users;

でカラムが確認できます。

データの挿入

作成したテーブルにデータを挿入します

INSERT INTO `users` VALUES (1,'test@example.com','TEST1011','Alice');

以下SELECT文を作成して挿入したデータが見れれば完了です。

SELECT * FROM users;

ユーザーの削除

ユーザーを削除する場合は

mysql> DROP USER 'USER_NAME'@'localhost';

で削除できます。

終わりに

ログインからデータ挿入まで一連の流れをまとめておくとmysqlに関する理解や、初めて触る人の役に立つかなと考え、まとめました。 今後、sql文のwhere句やORDER BYなどをまとめるつもりです。

■この公式ライターの他の記事はこちら

__________________________________

執筆者プロフィール:Satoshi Murasawa
前社ではRPAツールの技術サポート、開発を1年半経験。 SHIFTでは、バックエンドエンジニアとして入社し、node.jsやmysqlに触れはじめた。 DBに漠然とした興味があり、勉強して部の中でDB関連で役割を持つことができたらよいなと思っています。

★3分でわかるSHIFTについて

★SHIFTの導入事例はコチラ

★SHIFTの最新イベント情報はコチラ

★SHIFTの最新コラムはコチラ



みんなにも読んでほしいですか?

オススメした記事はフォロワーのタイムラインに表示されます!