- MySQL 用户分为
普通用户
和root用户
。root用户即超级管理员,拥有所有权限,包含创建,删除和修改用户等相关权限;普通用户只拥有被root用户授予的各种权限 - MySQL的安全性需要通过账户管理来实现
1、登录MySQL服务器
命令如下:mysql -h hostname|hostIP -P 端口号 -u 用户 -p 密码 数据库名称 -e "sql语句"
;示例如下:
powershell
[root@localhost ~]# mysql -h localhost -P 3306 -uroot -p123456 rqtanc -e "show create table rqtanc_test";
mysql: [Warning] Using a password on the command line interface can be insecure.
+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+
| rqtanc_test | CREATE TABLE `rqtanc_test` (
`id` int DEFAULT NULL,
`name` varchar(15) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+
2、创建用户
- 查看默认用户信息
powershell
mysql> select host , user from user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| % | root |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
+-----------+------------------+
4 rows in set (0.01 sec)
- 创建用户说明:
①使用create user
语句来创建新用户
②必须要有 create user 权限
③新创建的用户没有任何权限
④基本语法为:create user '用户名'@'hostName/hostIP' identified by '密码'
;
powershell
mysql> create user 'rqtanc1'@'192.168.%' identified by 'rqtanc1';
Query OK, 0 rows affected (1.38 sec)
mysql> create user rqtanc identified by 'rqtanc';
Query OK, 0 rows affected (3.98 sec)
3、修改用户
- 基本语法为:
update user set 字段名 = 字段值 where 相关条件
;如:
powershell
mysql> update user set host = '192.168.%' where user = 'rqtanc1';
Query OK, 1 row affected (2.37 sec)
Rows matched: 1 Changed: 1 Warnings: 0
- 修改后刷新用户权限:
flush privileges
;
powershell
mysql> flush privileges;
Query OK, 0 rows affected (0.33 sec)
4、删除用户
- 方式1:使用 drop user 的方式 (
推荐
) 语法为 :drop user '用户名'@'hostname/hostIP'
powershell
mysql> drop user 'rqtanc1'@'192.168.%';
Query OK, 0 rows affected (1.86 sec)
- 方式2: 使用delete 语句,语法格式为:
delete from user where host = 'hostname/hostIP' and user = '用户名';
,删除后 刷新权限flush privileges
;
powershell
mysql> delete from user where host = '%' and user = 'rqtanc';
Query OK, 1 row affected (0.66 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.49 sec)
- 使用delete 语句删除用户数据,会存在残留信息,如用户的权限信息,
不推荐
使用delete
语句方式
5、设置当前用户密码
- 方式一: 使用
alter user
命令修改当前用户,语法 :alter user user() identified by '密码'
;,如:
powershell
mysql> alter user user() identified by 'rqtanc';
Query OK, 0 rows affected (0.00 sec)
- 方式二: 使用
set
语句来修改当前用户, 语法 :set password = password('密码');
powershell
mysql> set password = '123456';
Query OK, 0 rows affected (0.00 sec)
6、设置其他用户密码
- 方式一: 使用
alter user
语句来修改普通用户密码, 语法为:alter user '用户名'@'hostname/hostIP' identified by '密码' ;
如:
powershell
mysql> alter user 'rqtanc' identified by 'rqtanc1';
Query OK, 0 rows affected (0.04 sec)
- 方式二:使用
set
方式修改普通用户密码,语法为 :set password for '用户'@'hostname/hostIP' = '密码';
如:
powershell
mysql> set password for 'rqtanc'@'%' = 'rqtanc';
Query OK, 0 rows affected (0.10 sec)
- 方式三: 使用
update
语句来修改用户(不推荐)
语法为:update user set authentication_string = password('密码') where host = 'hostname/hostIP' and user = '用户'
如:
powershell
mysql> update user set authentication_string = password('rqtanc') where host ='%' and user = 'rqtanc';
Query OK, 0 rows affected, 1 warning (0.64 sec)
Rows matched: 1 Changed: 0 Warnings: 1
更新后,刷新权限 flush privileges
7、MySQL 8.0 密码管理
7.1、密码过期策略
- 手动设置立马过期,语法:
alter user '用户' password expire;
如:
powershell
mysql> alter user 'rqtanc' password expire;
Query OK, 0 rows affected (0.34 sec)
- 手动设置指定时间过期方式
Ⅰ、全局设置 : 如果密码使用的时间大于允许时间,自动设置为过期,无需手动设置, 使用default_password_lifetime
系统变量建立全局密码过期策略
①默认值为: 0 ,表示禁用自动密码过期
②允许的值是正整数N,表示允许密码生存期。密码必须每隔N天
进行修改
③使用 sql 语句更改变量并实现持久化,如:
powershell
set default_password_lifetime = 180 ;
④在配置文件中进行维护,如:
powershell
[root@rqtanc ~]# vim /etc/my.cnf
#添加以下信息
default_password_lifetime = 180
Ⅱ、单独设置:即在 create user 或 alter user 语句加上 password expire N
或 password expire never
(永不过期) 或 password expire default
(沿用全局密码过期策略)
7.2、密码重用策略
- 基于
密码更改的次数
和使用时间
- 可以是
全局的
或为某个账号单独提供
- 通过
以下规则
限制密码重用:
①基于密码修改次数,则新密码不能从最近几次修改中选择
②基于使用时间,则新密码不能从规定时间内选择 - 使用
password_history
和password_reuse_interval
设置系统变量设置密码重用策略
①set persist password_history = 正整数
或set persist password_reuse_interval
= 时长(天)
②配置my.cnf
文件