当前MySQL版本为:
sql
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.4.2 |
+-----------+
1 row in set (0.01 sec)
目录
创建普通用户
使用CREATE USER
语句创建用户
sql
mysql> CREATE USER 'user01'@'localhost' IDENTIFIED BY '1qaz@WSX';
Query OK, 0 rows affected (1.01 sec)
此sql是创建一个user01的本地用户,密码为1qaz@WSX。
注意确保安全性,密码最好采用8位以上包含大写字母、小写字母、数字和特殊字符。
限制用户连接来源,如本例中的localhost,只允许本地登录;或指定某个某些个IP可登录。
除此之外创建用户时还可以使用加密连接和设置密码过期时间:
- REQUIRE SSL:指定用户必须使用SSL连接
- PASSWORD EXPIRE INTERVAL 90 DAY:设置密码过期时间为90天
sql
ALTER USER 'user02'@'192.168.10.%' PASSWORD EXPIRE INTERVAL 90 DAY;
为用户授权
MySQL支持在创建用户后为用户赋予相应的权限,比如对数据库的查询、修改等权限。
在MySQL中使用GRANT
语句为用户授权。
使用GRANT
语句也可以创建用户,但是不建议,建议使用CREATE USER
语句创建用户
常见权限主要分为以下:
- 数据库级别权限:
bash
CREATE:创建数据库
ALTER:修改数据库
DROP:删除数据库
SELECT:读取数据库中表数据
INSERT:向数据库中表插入数据
UPDATE:更新数据库中表数据
DELETE:删除数据库中表数据
- 表级别权限
bash
CREATE TABLE:创建表
ALTER TABLE:修改表
DROP TABLE:删除表
- 其他
bash
ALL PRIVILEGES:所有权限
示例:
- 授予用户user03对database01库的所有权限
sql
GRANT ALL PRIVILEGES ON database01.* TO 'user03'@'host';
- 授予用户对特定数据库的只读权限
sql
GRANT SELECT ON database_name.* TO 'username'@'host';
- 授予用户对特定表的插入和更新权限
sql
GRANT INSERT, UPDATE ON database_name.table_name TO 'username'@'host';
查看用户权限
在 MySQL 中,用户信息存储在mysql.user
表中。可以通过查询该表来获取有哪些用户
sql
mysql> SELECT user, host FROM mysql.user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
| user01 | localhost |
+------------------+-----------+
5 rows in set (0.01 sec)
使用SHOW GRANTS
语句来查看特定用户的权限。
sql
mysql> SHOW GRANTS FOR 'user01'@'localhost';
+--------------------------------------------+
| Grants for user01@localhost |
+--------------------------------------------+
| GRANT USAGE ON *.* TO `user01`@`localhost` |
+--------------------------------------------+
1 row in set (0.01 sec)
由于未给user01用户授权,所以看不到权限。
修改用户权限
在 MySQL 中可以使用 GRANT
和REVOKE
语句来修改原有用户的权限。
使用GRANT
语句添加权限:
给用户 user1 在数据库 mydb 上添加 INSERT 和 UPDATE 权限
sql
GRANT INSERT, UPDATE ON mydb.* TO 'user1'@'localhost';
使用REVOKE
语句撤销权限:
撤销用户 user1 在数据库 mydb 上的 DELETE 权限
sql
REVOKE DELETE ON mydb.* FROM 'user1'@'localhost';
注意:做这些动作时,确保你有足够的权限来操作。
修改用户密码
在 MySQL 中可以使用ALTER USER
方法来修改用户密码(进入MySQL中)
使用ALTER USER
语句将user01
密码改为12#¥qwER
bash
mysql> ALTER USER 'user01'@'localhost' IDENTIFIED BY '12#$qwER';
Query OK, 0 rows affected (1.02 sec)
删除用户
在 MySQL 中可以使用DROP USER
语句来删除用户。
bash
DROP USER 'username'@'host';
删除前要确保其用户是真的用不到的。