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 文件
相关推荐
小兜全糖(xdqt)2 小时前
mysql数据同步到sql server
mysql·adb
Karoku0662 小时前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix
周全全2 小时前
MySQL报错解决:The user specified as a definer (‘root‘@‘%‘) does not exist
android·数据库·mysql
白云如幻2 小时前
MySQL的分组函数
数据库·mysql
秋意钟5 小时前
MySQL日期类型选择建议
数据库·mysql
ac-er88885 小时前
MySQL如何实现PHP输入安全
mysql·安全·php
桀桀桀桀桀桀6 小时前
数据库中的用户管理和权限管理
数据库·mysql
瓜牛_gn11 小时前
mysql特性
数据库·mysql
Yaml416 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
追风林16 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker