MySQL-用户管理

  • 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 Npassword expire never(永不过期) 或 password expire default(沿用全局密码过期策略)

7.2、密码重用策略

  • 基于 密码更改的次数使用时间
  • 可以是全局的为某个账号单独提供
  • 通过以下规则限制密码重用:
    ①基于密码修改次数,则新密码不能从最近几次修改中选择
    ②基于使用时间,则新密码不能从规定时间内选择
  • 使用 password_historypassword_reuse_interval 设置系统变量设置密码重用策略
    set persist password_history = 正整数set persist password_reuse_interval = 时长(天)
    ②配置 my.cnf 文件
相关推荐
你都会上树?40 分钟前
MySQL MVCC 详解
数据库·mysql
长征coder2 小时前
AWS MySQL 读写分离配置指南
mysql·云计算·aws
ladymorgana2 小时前
【docker】修改 MySQL 密码后 Navicat 仍能用原密码连接
mysql·adb·docker
PanZonghui2 小时前
Centos项目部署之安装数据库MySQL8
linux·后端·mysql
GreatSQL社区2 小时前
用systemd管理GreatSQL服务详解
数据库·mysql·greatsql
掘根2 小时前
【MySQL进阶】错误日志,二进制日志,mysql系统库
数据库·mysql
weixin_438335402 小时前
基础知识:mysql-connector-j依赖
数据库·mysql
小明铭同学3 小时前
MySQL 八股文【持续更新ing】
数据库·mysql
程序员岳焱13 小时前
Java 与 MySQL 性能优化:Java 实现百万数据分批次插入的最佳实践
后端·mysql·性能优化
梦在深巷、14 小时前
MySQL/MariaDB数据库主从复制之基于二进制日志的方式
linux·数据库·mysql·mariadb