0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Mysqlのデータベース作成・ユーザー作成・ユーザー権限付与の方法

Last updated at Posted at 2022-11-27

はじめに

今回は、データベース作成・ユーザー作成・ユーザー権限付与の方法について記載します。
今まで、SQLは書いたことがありましたが最初に行うデータベース作成・ユーザー作成・ユーザー権限付与に関してはあまり行ったことがなかったので記事にしました。

参考になれば幸いです。

目次

  1. 環境構築(docker)
  2. データベース作成方法
  3. ユーザー作成方法
  4. ユーザー権限付与
  5. 参考文献

環境構築(docker)

今回は、下記のリポジトリを利用して環境を構築させていただきます。
https://github.com/tadatakuho/mysql-docker

1.git cloneにより、必要なファイル一覧(docker-compose.yml等)を取得します

git clone git@github.com:tadatakuho/mysql-docker.git
docker-compose.yml
version: "3"

services:
  mysql:
    image: mysql:latest
    container_name: mysql_container
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: sakila
      TZ: "Asia/Tokyo"
    volumes:
      - ./my.cnf:/etc/mysql/conf.d/my.cnf
      - ./init:/docker-entrypoint-initdb.d
    ports:
      - "3306:3306"

2.クローンしたディレクトリに移動して、イメージ作成・コンテナ作成・立ち上げを行います

cd mysql-docker
docker-compose up -d

3.起動したコンテナの中に入ります

docker-compose exec mysql /bin/bash

mysqlの記載がある箇所は、docker-compose.ymlに記載のあるサービス名を記載します。

ターミナルが下記の表示になればOKです。

bash-4.4#

4.mysqlにroot権限で接続します。

bash-4.4# mysql --user=root --password=root

ターミナルが下記の表示になればOKです。

mysql> 

データベース作成方法

1.現在のデータベース一覧を確認します

mysql> show databases;

結果

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
+--------------------+

2.新しいデータベースを作成します。

mysql> CREATE DATABASE example;

下記の表示がでれば成功です。

Query OK, 1 row affected (0.02 sec)

3.再度データベース一覧を確認します。

mysql> show databases;

下記のように、2で指定したデータベースが表示されていればOKです。

+--------------------+
| Database           |
+--------------------+
| example            |
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
+--------------------+

ユーザー作成方法

1.現在のユーザ一覧を確認します。

mysql> SELECT user, host FROM mysql.user;

結果

+------------------+-----------+
| user             | host      |
+------------------+-----------+
| root             | %         |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+

2.ユーザーを作成します。今回は下記のユーザーを作成します。

  • ユーザー名: example_user
  • host: localhost
  • password: example
mysql> CREATE USER 'example_user'@'localhost' IDENTIFIED BY 'example';

下記の表示が出ていれば成功です。

Query OK, 0 rows affected (0.02 sec)

3.再度ユーザー一覧を確認します。

mysql> SELECT user, host FROM mysql.user;

結果

+------------------+-----------+
| user             | host      |
+------------------+-----------+
| root             | %         |
| example_user     | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+

下記のように、2で指定したユーザーが表示されていればOKです。

4.作成したユーザーでmysqlに接続します。

bash-4.4# mysql --host=localhost --user=example_user --password=example

ターミナルが下記の表示になればOKです。

mysql> 

5.試しにデータベース一覧を見ます。

mysql> show databases;

結果

+--------------------+
| Database           |
+--------------------+
| information_schema |
| performance_schema |
+--------------------+

ユーザーに権限を付与していないので「sakila」や「example」のデータベースの表示がありません。次のセクションで「example_user」権限を付与していきます。

ユーザー権限付与

1.再度rootユーザーでmysqlに接続します。

bash-4.4# mysql --user=root --password=root

2.「example_user」に権限を付与します。
今回は「sakila」のデータベースへのSELECTの権限を付与します。
sakilaについて: https://dev.mysql.com/doc/sakila/en/

mysql> GRANT select ON sakila.* TO 'example_user'@'localhost';

下記の表示が出ていれば成功です。

Query OK, 0 rows affected, 1 warning (0.01 sec)

3.再度「example_user」でmysqlに接続します。

bash-4.4# mysql --host=localhost --user=example_user --password=example

ターミナルが下記の表示になればOKです。

mysql> 

4.データベース一覧を見ます。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| performance_schema |
| sakila             |
+--------------------+

sakilaが追加されています。
正しく権限を付与できているか確認するためにsakilaの「city」テーブルでSELECT文を実行してみます。

5.まず、「sakila」のデータベースに切り替えます。

mysql> use sakila;

「Database changed」の表記があれば成功です。

6.テーブル一覧をみます。

mysql> show tables;

結果

+----------------------------+
| Tables_in_sakila           |
+----------------------------+
| actor                      |
| actor_info                 |
| address                    |
| category                   |
| city                       |
| country                    |
| customer                   |
| customer_list              |
| film                       |
| film_actor                 |
| film_category              |
| film_list                  |
| film_text                  |
| inventory                  |
| language                   |
| nicer_but_slower_film_list |
| payment                    |
| rental                     |
| sales_by_film_category     |
| sales_by_store             |
| staff                      |
| staff_list                 |
| store                      |
+----------------------------+

7.sakilaの「city」テーブルでSELECT文を実行してみます。

mysql> SELECT * FROM city limit 5;

結果

+---------+--------------------+------------+---------------------+
| city_id | city               | country_id | last_update         |
+---------+--------------------+------------+---------------------+
|       1 | A Corua (La Corua) |         87 | 2006-02-15 04:45:25 |
|       2 | Abha               |         82 | 2006-02-15 04:45:25 |
|       3 | Abu Dhabi          |        101 | 2006-02-15 04:45:25 |
|       4 | Acua               |         60 | 2006-02-15 04:45:25 |
|       5 | Adana              |         97 | 2006-02-15 04:45:25 |
+---------+--------------------+------------+---------------------+

SELECT文が通り、テーブルの中身を確認できました。

8.試しに権限のないupdate文を実行してみます。country_idが87のcityをtestに変更してみます。

mysql> UPDATE city set city=test WHERE country_id=87;

結果

ERROR 1142 (42000): UPDATE command denied to user 'example_user'@'localhost' for table 'city'

権限がないのでERRORが返ってきます。

参考文献

0
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?