MYSQL8用户权限配置详解

        单位的系统性能问题需要把Mysql5升级到Mysql8,需要用到Mysql8的一些特性来提升系统的性能。

        配置用户权限过程中发现一些问题,学习并记录一下。

目录

一、环境

二、MySQL8 用户权限

2.1 账号管理权限

2.1.1 连接数据库

2.1.2 账号权限配置

2.2 密码管理

2.3 锁账号配置(含示例)

三、MySQL8 用户资源限制


一、环境

  • Windows11;
  • Docker (中文下载:Docker中文网 官网,英文下载:Get Started | Docker,安装:一直下一步即可);
  • Mysql5、Mysql8.0.28。
# 下载镜像
$ docker pull mysql:8.0.28# 创建容器并运行
$ docker run -itd --name mysql8 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_ROOT_HOST='%' mysql

二、MySQL8 用户权限

        在 MySQL8 之前,授权表使用 MyISAM 并且是非事务性的,而在 MySQL8 中,授权表使用 InnoDB 存储引擎并且是事务性的。通过查看创建表的语句(命令:show create table user;)来查看表的存储引擎,如下图:

        服务器在启动时将授权表的内容读入内存,当修改权限时需要通过命令 FLUSH PRIVILEGES 重新加载使权限生效。

        在mysql8中有如下权限相关表:

user:用户帐户、静态全局权限表;
global_grants:动态全局权限表;
db:数据库级的权限表;
tables_priv:存储表级权限;
columns_priv: 存储列级权限;
procs_priv: 存储过程和函数权限表;
proxies_priv: 代理用户权限表;
default_roles:默认用户角色表;
role_edges:记录角色与用户的授权关系表;
password_history: 密码更改历史表。

        本文只是针对一般的开发者为满足开发和部署一般系统需要配置用户权限信息,基本上只涉及到user表。        

2.1 账号管理权限

2.1.1 连接数据库

  • 短命令
docker exec -it mysql3307 bash    // 回车
mysql -uroot -p //回车再输入密码

    如下图所示:

  • 长命令
docker exec -it mysql3307 bash    // 回车
mysql --user=root --password    // 回车,再输入密码

    如下图所示: 

2.1.2 账号权限配置

  • 创建和删除帐户
CREATE USER 和 DROP USER 创建和删除帐户;
  • 分配权限和撤销权限
GRANT 和 REVOKE 分配权限和撤销权限;

示例:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';  // 创建局域网络账号
GRANT ALL ON *.* TO 'username'@'localhost' WITH GRANT OPTION; // 分配权限
REVOKE ALL ON *.* FROM 'username'@'localhost';                // 撤销权限
SHOW GRANTS FOR 'username'@'localhost';                       // 查看权限
DROP USER 'username'@'localhost';                             // 删除账号

    注:其它机器用户访问的用户权限配置只需要修改localhost,如 localhost修改为% 表示任意机器网络,localhost修改为192.168.2.% 表示给192.168.2这个ip连接数据库配的用户权限。

2.2 密码管理

  • 修改密码
ALTER USER 'username'@'%' IDENTIFIED BY 'password';//修改密码
  • 设置密码过期时间
ALTER USER 'username'@'%' PASSWORD EXPIRE;                 //设置立即过期
ALTER USER 'username'@'%' PASSWORD EXPIRE INTERVAL 30 DAY; //设置30天过期
ALTER USER 'username'@'%' PASSWORD EXPIRE NEVER;           //禁用密码过期
  •  禁止重复使用最近3个或超过30天的密码

        修改文件 my.cnf,mysql8.0.28是/etc/my.cnf:

[mysqld]
password_history=3
password_reuse_interval=30

2.3 锁账号配置(含示例)

# 连续登录失败3次则锁定1天,天数可取值:0-32767,设置 0 则代表解锁
CREATE USER 'test'@'localhost' IDENTIFIED BY 'test123' FAILED_LOGIN_ATTEMPTS 7 PASSWORD_LOCK_TIME 1;# 连续登录失败3次则永久锁定
ALTER USER 'try8'@'localhost' FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME UNBOUNDED;

示例:

# 登陆MYSQL
PS C:\Users\Administrator> docker exec -it mysql8 bash
bash-4.4# mysql -uroot -p
Enter password:                                    # 此外输入密码完成登陆
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.2.0 MySQL Community Server - GPL
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
# 登陆连续登陆失败3次锁一天的用户test
mysql> CREATE USER 'test'@'localhost' IDENTIFIED BY 'test123' FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1;
Query OK, 0 rows affected (0.01 sec)
mysql> FLUSH PRIVILEGES;
# 打开另一终端,用正确密码测试是否登陆成功
PS C:\Users\Administrator> docker exec -it mysql8 bash
bash-4.4# mysql -utest -ptest123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.2.0 MySQL Community Server - GPL
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>                                # 进到这里说明登陆成功
mysql> exit
Bye
# 测试登陆3次失败
bash-4.4# mysql -utest -ptest12345
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'test'@'localhost' (using password: YES)
bash-4.4# mysql -utest -ptest12345
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'test'@'localhost' (using password: YES)
bash-4.4# mysql -utest -ptest12345
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 3955 (HY000): Access denied for user 'test'@'localhost'. Account is blocked for 1 day(s) (1 day(s) remaining) due to 3 consecutive failed logins.
bash-4.4#

        第三次输入失败后有提示  Account is blocked for 1 day(s) (1 day(s) remaining) 账号已被锁1天。

# 输入正确的用户名密码登陆看是否成功
bash-4.4# mysql -utest -ptest123
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 3955 (HY000): Access denied for user 'test'@'localhost'. Account is blocked for 1 day(s) (1 day(s) remaining) due to 3 consecutive failed logins.

        因输入错误3次被锁定,即使再输入正确的用户名和密码也无法登陆。

  • 解锁
ALTER USER 'test'@'localhost' IDENTIFIED BY 'test123' FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 0;

        设置0:代表解锁。

三、MySQL8 用户资源限制

        将全局系统变量 max_user_connections 设置为非零值,可以限制同时建立的连接数,但是对客户端连接后可以执行的查询更新操作没有限制。客户端可以发出的任何语句都计入查询限制,只有修改库表才计入更新限制。

  • MAX_QUERIES_PER_HOUR:客户端每小时可以发出的查询数;
  • MAX_UPDATES_PER_HOUR:客户端每小时可以发出的更新数;
  • MAX_CONNECTIONS_PER_HOUR:客户端每小时可以连接到服务器的次数;
  • MAX_USER_CONNECTIONS:客户端同时连接的服务器数量等。

通过创建用户账号限制示例:

CREATE USER 'test'@'localhost' IDENTIFIED BY 'test123'WITH MAX_QUERIES_PER_HOUR 10000 MAX_UPDATES_PER_HOUR 10000 MAX_CONNECTIONS_PER_HOUR 10000 MAX_USER_CONNECTIONS 10000 ; # 客户端每小时的查询数、更新数、连接服务器的次数和数量为10000 。

通过修改和删除账号限制示例:

ALTER USER 'test'@'localhost' WITH MAX_QUERIES_PER_HOUR 10000; //修改限制
ALTER USER 'test'@'localhost' WITH MAX_CONNECTIONS_PER_HOUR 0; //设置0,为删除限制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/199469.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Container容器技术简介

本文介绍了容器技术出现背景,docker技术与容器编排技术的简单说明 背景 在传统项目的生产环境中,迁移一个用户态进程往往非常麻烦,因为一个用户态进程背后会附带这非常多例如函数库、中间件等的依赖项,但又没有像apt和yum一样的…

洗地机哪个牌子好用?洗地机希亦、石头、添可、西屋谁的清洁力更强?

洗地机的出现极大地改善了清洁过程,提高了效率,减少了人力投入。但随着市场上洗地机的种类和功能不断增加,人们可能会感到困惑,不知道如何选择适合自己需求的机器。为了帮助消费者更好地了解洗地机的选择,今天我将带大…

java21实战record

java程序员一直以如何让代码写的可维护性跟高,不论是框架还是代码都追求精益求精。 第一阶段:由于面向对象的要求,我们会将成员变量用私有属性修饰,但是,如果面临类中的成员变量比较多的情况下,修改会非常麻…

【python】包(package)与模块(module)、import、__name__与__main__

导入模块一般写在程序最前面,且顺序为:内置模块、第三方模块、自定义模块 一、模块(module)与包(package) 模块(module)可以理解为是一个.py文件,import 模块 相当于执行…

C语言-详解指针

目录 一.内存 1.内存的定义 2.内存的结构图 二.地址 1.什么是地址 2.什么是变量的地址 三.什么是指针 1.指针的定义 四.如何获取数据存储空间的地址 1.&运算符 五.指针变量 1.什么是指针变量(一级指针变量) 2.指针变量的定义 3…

Http中post和get

get产生一个tcp数据包,服务器只响应一次,而post请求服务器会响应两次(第一次发送请求头响应100,再次响应返回200,成功

高性能、低功耗并附带RAM的涓流充电实时时钟电路芯片D1302的描述

D1302是一块高性能、低功耗并附带RAM的涓流充电实时时钟电路。 主要特点: ● 实时时钟可提供秒、 分、小时、星期、日期、月 份和年等计时数据,到2100 年止。一个月小于31天时可自动调整,且具有闰年补偿功能 ● 31X8 位通用暂存RAM ● 采用…

vue中的动画组件使用及如何在vue中使用animate.css

“< Transition >” 是一个内置组件&#xff0c;这意味着它在任意别的组件中都可以被使用&#xff0c;无需注册。它可以将进入和离开动画应用到通过默认插槽传递给它的元素或组件上。进入或离开可以由以下的条件之一触发&#xff1a; 由 v-if 所触发的切换由 v-show 所触…

单机无锁线程安全队列-Disruptor

Disruptor 1、基本介绍 说到队列&#xff0c;除了常见的mq中间件&#xff0c;java中也自带线程安全的BlockingQueue&#xff0c;但是BlockingQueue通过在入队和出队时加锁的方式避免并发操作&#xff0c;性能上会大打折扣。 而Disruptor是一个线程安全、低延迟、吞吐量高的队…

SpectralGPT: Spectral Foundation Model 论文翻译3

遥感领域的通用大模型 2023.11.13在CVPR发表 原文地址&#xff1a;[2311.07113] SpectralGPT: Spectral Foundation Model (arxiv.org) E.消融研究 在预训练阶段&#xff0c;我们对可能影响下游任务表现的各种因素进行了全面研究。这些因素包括掩蔽比、ViT patch大小、数据规…

多线程--11--ConcurrentHashMap

ConcurrentHashMap与HashMap等的区别 HashMap线程不安全 我们知道HashMap是线程不安全的&#xff0c;在多线程环境下&#xff0c;使用Hashmap进行put操作会引起死循环&#xff0c;导致CPU利用率接近100%&#xff0c;所以在并发情况下不能使用HashMap。 ConcurrentHashMap 主…

Linux信息收集

Linux信息收集 本机基本信息 #管理员 $普通用户 之前表示登录的用户名称&#xff0c;之后表示主机名&#xff0c;再之后表示当前所在目录 / 表示根目录 ~表示当前用户家目录1、内核&#xff0c;操作系统和设备信息 uname -a 打印所有可用的系统信息 uname -r 内核版本 u…

01_阿里云_Xshell连接服务器

PC使用Xshell连接阿里云服务器 问题引出 之前使用Xshell连接阿里云服务器连接的好好的&#xff0c;今天准备上去服务器学习Linux发现连不上了&#xff0c;后来发现是防火墙的问题&#xff0c;还有阿里云的安全组也需要设置 解决方案 方法一&#xff1a;&#xff08;简单粗暴…

3D模型材质编辑

在线工具推荐&#xff1a; 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 如今&#xff0c;3D 纹理、打印和建模都非常流行。使用可用的高级工具&#xff0c;创建 3D 模型…

基于Git的代码工程管理——学习记录一

一、Git简概[1] Git是一个分布式版本控制系统&#xff0c;它跟踪任何一组计算机文件的更改&#xff0c;通常用于在软件开发过程中协调协作开发源代码的程序员之间的工作。其为实现快速、数据完整性以及分布式非线性工作流程&#xff08;在不同计算机上运行数千个并行分支&#…

钉钉提交审批意见,并上传附件接口集成

一&#xff1a;适配器 DingtalkApprovalFilesExecute 参考方案链接&#xff1a;轻易云数据集成平台 二&#xff1a;请求接口。配置参数 接口文档&#xff1a;使用了新旧接口 服务端API发起带有附件的审批流并下载附件 - 钉钉开放平台 接口&#xff1a;topapi/processinsta…

Python编程技巧:多层for循环的高级应用

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Python的for循环结构是编程中最基础也是最常用的控制结构之一。通过for循环&#xff0c;可以轻松遍历数据集合和执行重复的操作。然而&#xff0c;当我们面对多层for循环时&#xff0c;性能和可读性可能会成为挑…

Redis的三种消息队列实现方式

目录 前言 List实现消息队列 PubSub消息队列 Stream消息队列 三种实现方式对比 前言 为什么要使用Redis的消息队列&#xff1f; 成本低&#xff0c;对于RabbitMQ或是Kafka来说&#xff0c;已经是重量级的消息队列。 Redis的三种实现方式&#xff1a; List结构&#xff1…

【安卓12源码】WMS系列:addWindow 和 removeWindow流程

一、Window 的属性 Window的属性定义在WindowManager的内部类LayoutParams中&#xff0c;了解Window的属性能够更好的理解WMS的内部原理。Window的属性有很多种&#xff0c;与应用开发最密切的有三种&#xff0c;它们分别是Type(Window的类型)、Flag(Window的标志)和SoftInputM…

SMART PLC温度采集模块温度转换FC(梯形图+SCL代码)

对于模拟量输入采集,温度变送器等我们可以利用线性转换功能块完成温度采集,西门子PLC有温度采集模块,利用温度采集模块采集温度我们的转换关系无需进行线性变换,下面我们具体介绍。温度采集线性转换功能块请参考下面的文章链接: https://rxxw-control.blog.csdn.net/arti…