## モジュール 1: ユーザーとロールの作成

### 手順 1. 仮想マシンにログインする

+ ここをクリック - [ターミナル 1](ssh://monitor1-ssh#1) で、ハンズオン演習用に割り当てられた仮想マシンに接続された新しいターミナルを開きます。

### 手順 2. TiDB に接続する

TiDBに接続するには、最初に以下の手順に従ってください。

  ```bash
  mysql -h ${HOST_DB1_PRIVATE_IP} --port 4000 -u root
  ```

### 手順 3. ユーザー `jack` を作成する

+ 新しいユーザー`'jack'@'${LAB:HOST_MONITOR1_PRIVATE_IP}'`を作成します。

  ```sql
  CREATE USER 'jack'@'${LAB:HOST_MONITOR1_PRIVATE_IP}' IDENTIFIED BY 'pingcap';
  ```

  ```output
  tidb> CREATE USER 'jack'@'${LAB:HOST_MONITOR1_PRIVATE_IP}' IDENTIFIED BY 'pingcap';
  Query OK, 0 rows affected (0.03 sec)
  ```

### 手順 4. 新しいロールを作成する

+ `r_manager`と`r_staff`という2つの新しいロールを作成します

  ```sql
  CREATE ROLE r_manager, r_staff;
  ```

  ```output
  tidb> CREATE ROLE r_manager, r_staff;
  Query OK, 0 rows affected (0.02 sec)
  ```

### 手順 5. ユーザーとロールを確認します

  ```sql
  SELECT user, host, authentication_string FROM mysql.user\G
  ```

  ```output
  tidb> SELECT user, host, authentication_string FROM mysql.user\G
  *************************** 1. row ***************************
                    user: root
                    host: %
  authentication_string: *7451D85E369BF796CD15900AF9BFE0D5D920716E
  *************************** 2. row ***************************
                    user: jack
                    host: 172.31.0.106
  authentication_string: *926E4B88EB93FD344DF0870EE025D6EB153C02DE
  *************************** 3. row ***************************
                    user: r_manager
                    host: %
  authentication_string:
  *************************** 4. row ***************************
                    user: r_staff
                    host: %
  authentication_string:
  4 rows in set (0.00 sec)
  ```

+ ユーザーとロールは両方とも `mysql.user` テーブルに保存されています。ロールにはパスワードがありません。

### 手順 6. `r_staff` を確認する

  ```sql
  SELECT * FROM mysql.user WHERE user='r_staff'\G
  ```

  ```output
  tidb> SELECT * FROM mysql.user WHERE user='r_staff'\G
  *************************** 1. row ***************************
                    Host: %
                    User: r_staff
   authentication_string:
                  plugin: mysql_native_password
             Select_priv: N
             Insert_priv: N
             Update_priv: N
             Delete_priv: N
             Create_priv: N
               Drop_priv: N
               ...
              Event_priv: N
         Repl_slave_priv: N
        Repl_client_priv: N
            Trigger_priv: N
        Create_role_priv: N
          Drop_role_priv: N
          Account_locked: Y
           Shutdown_priv: N
             Reload_priv: N
               FILE_priv: N
             Config_priv: N
  Create_Tablespace_Priv: N
  1 row in set (0.00 sec)
  ```

### 手順 7. `jack` のパスワードを変更する

+ `ALTER USER`ステートメントを使用して`'jack'@'${LAB:HOST_MONITOR1_PRIVATE_IP}'`のパスワードを`tidb`に変更し、その後、セッションを終了します。

  ```sql
  ALTER USER 'jack'@'${LAB:HOST_MONITOR1_PRIVATE_IP}' IDENTIFIED BY 'tidb';
  ```

  ```output
  tidb> ALTER USER 'jack'@'${LAB:HOST_MONITOR1_PRIVATE_IP}' IDENTIFIED BY 'tidb';
  Query OK, 0 rows affected (0.02 sec)
  ```

  ```sql
  EXIT;
  ```

  ```output
  tidb> EXIT
  Bye
  ```

### 手順 8. `jack` として TiDB に接続する

+ 新しいパスワードで `'jack'@'${LAB:HOST_MONITOR1_PRIVATE_IP}'` ユーザーとして TiDB に接続し、その後セッションを終了します。

  ```bash
  mysql -h ${HOST_DB1_PRIVATE_IP} -P 4000 -ujack -ptidb
  ```

  ```sql
  EXIT
  ```

  ```output
  tidb> EXIT
  Bye
  ```

### 手順 9．`root` としてTiDBに接続する

  ```bash
  mysql -h ${HOST_DB1_PRIVATE_IP} --port 4000 -u root
  ```

### 手順 10. `r_staff` を削除します

  ```sql
  DROP ROLE r_staff;
  ```

  ```output
  tidb> DROP ROLE r_staff;
  Query OK, 0 rows affected (0.03 sec)
  ```

  ```sql
  SELECT user, host FROM mysql.user WHERE user='r_staff';
  ```

  ```output
  tidb> SELECT user, host FROM mysql.user WHERE user='r_staff';
  Empty set (0.01 sec)
  ```

### 手順 11. `r_manager` を削除する

  ```sql
  DROP ROLE r_manager;
  ```

  ```output
  tidb> DROP ROLE r_manager;
  Query OK, 0 rows affected (0.03 sec)
  ```

  ```sql
  SELECT user, host FROM mysql.user WHERE user='r_manager';
  ```

  ```output
  tidb> SELECT user, host FROM mysql.user WHERE user='r_manager';
  Empty set (0.01 sec)
  ```

### 手順 12. ユーザー `jack` を削除

+ `DROP USER` ステートメントを使用して `'jack'@'${LAB:HOST_MONITOR1_PRIVATE_IP}’` ユーザーを削除します。実際の IP アドレス `${HOST_MONITOR1_PRIVATE_IP}` を手動で実際の IP に置き換えてください。

  ```sql
  DROP USER 'jack'@'${LAB:HOST_MONITOR1_PRIVATE_IP}';
  ```

  ```output
  tidb> DROP USER 'jack'@'${LAB:HOST_MONITOR1_PRIVATE_IP}';
  Query OK, 0 rows affected (0.02 sec)
  ```

  ```sql
  SELECT user, host FROM mysql.user WHERE user='jack';
  ```

  ```output
  tidb> SELECT user, host FROM mysql.user WHERE user='jack';
  Empty set (0.00 sec)
  ```

  ```sql
  EXIT
  ```

  ```output
  tidb> EXIT
  Bye
  ```
