# 练习 1: 创建用户和角色

## 练习目的
在这个练习中，您将会学习创建用户并为用户设置密码，之后创建 2 个角色，最后将用户和角色删除。

## 先决条件
+ 注意，您的练习环境（包括 IP，端口号，用户名，密码和目录）可能和本练习不同。
+ 可以连接到实验用虚拟机。
+ TiDB 数据库已经部署完毕。


1. 启动一个 mysql 客户端会话.
```
$ mysql -h120.131.9.24 -P4000 -uroot -p
```


2. 创建用户 'jack'@'120.131.9.24'.
```sql
> CREATE USER 'jack'@'120.131.9.24' IDENTIFIED BY 'pingcap';
```


3. 创建 2 个新的角色，名为 `r_manager` 和 `r_staff`.
```sql
> CREATE ROLE r_manager, r_staff;
```


4. 查询 `mysql.user` 表的 `user`, `host` 和 `authentication_string` 列 ，确认新的用户和角色已经被创建, 并发现: 用户和角色都被存储在 `mysql.user` 表中, 并且角色是没有密码的.
```sql
> SELECT user, host, authentication_string FROM mysql.user\G;
```

5. 在 `mysql.user` 表中查询角色 `r_staff` 的详细信息, 发现角色的特点：角色是被锁定的（`Account_locked: Y`）和角色没有密码（`authentication_string` 为空）.
```sql
> SELECT * FROM mysql.user WHERE user='r_staff'\G;
```


6. 修改 `'jack'@'120.131.9.24'` 的密码为 `tidb`, 并退出.
```sql
> ALTER USER 'jack'@'120.131.9.24' IDENTIFIED BY 'tidb';
```

7. 使用用户 `'jack'@'120.131.9.24’` 的新密码重新连接，验证密码是否修改成功, 登录成功后退出会话（请根据自己实验环境输入密码）.
```
$ mysql -h120.131.9.24 -P 4000 -ujack -ptidb
```
```sql
> exit
```

8. 以 root 用户登录 TiDB （请根据自己实验环境输入密码）.
```
$ mysql -h120.131.9.24 -P 4000 -uroot -p
```

9. 删除角色 `r_staff`, 并且通过 `mysql.user` 表进行确认.
```sql
> DROP ROLE r_staff;
```
```sql
> SELECT user, host FROM mysql.user WHERE user=‘r’_staff;
```


10. 删除角色 `r_manager`, 并且通过 `mysql.user` 表进行确认.
```sql
> DROP ROLE r_manager;
```
```sql
> SELECT user, host FROM mysql.user WHERE user='r_manager';
```

11. 删除用户 `'jack'@'120.131.9.24’`，并且通过 `mysql.user` 表进行确认.
```sql
> DROP USER 'jack'@'120.131.9.24'; 
```
```sql
> SELECT user, host FROM mysql.user WHERE user='jack';
```



## 步骤 5 输出样例
```sql
> SELECT user, host, authentication_string FROM mysql.user\G;
*************************** 1. row ***************************
                 user: root
                 host: %
authentication_string: *7451D85E369BF796CD15900AF9BFE0D5D920716E
*************************** 2. row ***************************
                 user: jack
                 host: 120.131.9.24
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)

ERROR:
No query specified
```

