mysql my.ini、登录、用户相关操作、密码管理、权限管理、权限表,角色管理

my.ini 配置文件格式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

登录mysql

mysql -h hostname | IP -P port -u username -p database -e “select 语句”;

在这里插入图片描述

在这里插入图片描述

创建用户、修改用户、删除用户

create user ‘zen’ identified by ‘密码’ ## host 默认是 %

create user ‘zen’@‘localhost’ identified by ‘密码’

update user set user=‘zen123’ where user=‘zen’; # 如何有多个用户,需要家 and host=‘xxx’ 条件, 最后别忘记 Flush privileges ;

删除用户

方式1
drop user user1[,…usern ] ;
此处的user1: 用用户名和主机名组成。 zen@localhost
支持同时删除多个用户,用逗号隔开。
drop user zen ; drop user ‘zen’ ; # 默认是删除 host=%的用户
drop user ‘zen‘@’localhost’
flush privileges; 把权限表 重新加载到内存,让不退出登录,权限便可生效。
方式2
delete from mysql.user where Host=‘xxxx’ and user=‘xxxx’; ### host 和user 两个字段联合主键。
flush privileges;

建议
不推荐通过delete from user 进行删除,系统会有残留信息保留
drop user 命令删除用户以及对应的权限,执行命令后你会发现 mysql.user 表和 mysql.db 表的相应记录都消失了

在这里插入图片描述

在这里插入图片描述

修改密码

alter 和 set

root用户修改指定普通用户密码

alter user u identified by ‘密码’;
u: 由 用户名和主机名构成 ‘zen’@‘localhost’

set password for u=‘密码’
u:由 用户名和主机名构成 ‘zen’@‘localhost’

修改当前用户密码

alter user user() idenfited by ‘密码’;
user(): 返回是 当前登录用户的 用户名@主机名

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

密码管理

密码管理功能只针对使用基于MySQL授权插件的账号
这些插件如下:
mysql_native_password
sha256_password
caching_sha2_password
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
密码过期策略
手动设置 账号密码过期,也可以建立一个 自动 密码过期策略
过期策略 可以是 全局 也可以为 每个账号 设置单独的过期策略

手动设置立马过期
alter user ’zen‘@‘localhost’ password expire;
在这里插入图片描述

在这里插入图片描述>

手动设置指定时间过期方式1 全局
default_password_lifetime 系统变量建立全局密码过期策略
默认值 0 : 禁用自动密码过期
允许正整数N,表示允许的密码生存期。密码必须 每隔N天 进行修改
在这里插入图片描述

set persist default_password_lifetime=180; ### 没写 global,默认是 session, 建立全局策略,设置密码每个180天过期

配置文件 my.ini 全局 ###重启才能生效
[mysqld]
default_password_lifetime=180

单独设置 指定用户 过期策略
create user ‘xxx’@‘%’ identified by ‘密码’ password expire interval 90 DAY;
在这里插入图片描述
修改指定用户 密码过期时间
alter user ‘xxx’@‘%’ password expire interval 100DAY;在这里插入图片描述

###设置密码永不过期
create user ‘XXX’@‘localhost’ password expire never
alter ser ‘XXX’@‘localhost’ password expire never

在这里插入图片描述

延用全局密码过期策略

create user ‘XXX’@‘localhost’ password expire default
alter ser ‘XXX’@‘localhost’ password expire default
在这里插入图片描述

密码重用策略

mysql限制使用已用过的密码。 重用限制策略基于 密码更改的数量和使用的时间
重用策略可以是 全局 的,也可以为每个账号设置 单独的策略
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

mysql 使用 password_history 和 password_reuse_interval 系统变量设置密码重用策略
password_history : 规定密码重用的数量
password_reuse_interval: 规定密码重用的周期
这两个值 可以通过 my.ini 中维护 也可以在运行期间 通过 sql语句更改 变量的值 并持久化 persist

方式1 使用sql
set persist password_hostiry=6; # 设置不能选择最近使用过的6个密码
set persist password_reuse_interval=365; # 设置不能选择最近一年内的密码

方式2 my.ini
[mysqld]
password_history=6 # 设置不能选择最近使用过的6个密码
password_reuse_interval=365 # 设置不能选择最近一年内的密码

手动设置密码重用方式2:单独设置 ,上面 设置 都是 全局的
create user ‘xx’@‘localhost’ password history 5;
alter user ‘xx’@‘localhost’ password history 5;
在这里插入图片描述

create user ‘xx’@‘localhost’ password resuse interval 365 day;
alter user ‘xx’@‘localhost’ password resuse interval 365 day;
在这里插入图片描述

既不能使用最近5个密码,也不能使用365天内的密码
create user ’XXX‘ @’localhost‘
identified by ’密码‘
password history 5
reuse interval 365;

alter user ’XXX‘ @’localhost‘
password history 5
reuse interval 365 day;

延后全局策略
create user ’XXX‘ @’localhost‘
identified by ’密码‘
password history default
reuse interval default;

alter user ’XXX‘ @’localhost‘
password history default
reuse interval 365 default;

在这里插入图片描述

授权

语法格式:
grant 权限列表 on 库名.表名 to 用户名@‘客户端主机’ ### 当未查询到用户名时会自动创建
[identified by ‘密码’] [with grant option];
grant all privileges on . to root@“IP地址” identified by ‘密码’ with grant option;
all privileges: 表示所有权限。
identified by:指定用户的登录密码
with grant option表示该用户可以将自己拥有的权限授权给别人。

grant 权限叠加
grant select on zen.employee to ‘xx’@’%‘ ;
grant update on zen.employee to ‘xx’@’%‘ ;
所以 zen 用户 拥有 select 和update 权限
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

– 查看当前用户(自己)权限
show grants;
show grants for current_user;
show grants for current_user();

查看指定用户的权限
show grants for dba@localhost;

权限收回

revoke 收回权限之后,用户账户的记录将从 db、host、tables_priv和 columns_priv 表中删除,但用户账户记录仍然存在 user表中
要删除user表中记录 需要 drop user语句

在这里插入图片描述

revoke all privileges on . from dba@localhost;
revoke 权限列表 on 数据库.表 from 用户名@localhost;
回收之后,对应用户需要重新进入。
在这里插入图片描述

权限表

在这里插入图片描述

  1. user xxx_priv 是针对所有数据库的权限
    grant select on . to zen@localhost ; user表中 Select_priv 就变成 Y啦

在这里插入图片描述

  1. db 是针对具体的数据库权限
    grant select on test.* to zen@localhost ; user表中 Select_priv 就变成 Y啦
    在这里插入图片描述
    在这里插入图片描述
  1. tables_priv
    在这里插入图片描述
  1. columns_priv
    grant select(列1,列2) on test.表 to zen@localhost
    在这里插入图片描述

mysql请求的过程

一般软件针对权限都分2个阶段

  1. 登录权限 只可以登录,不能操作系统
  2. 操作权限 可以操作授权的模块。

当mysql允许一个用户执行各种操作时,它将 ①首先 核实该用户向MySQL服务发送的连接请求 ②确认用户的操作请求是否被允许。
这个过程 mysql 称为 访问控制过程
mysql 访问控制过程分2个阶段

  1. 连接核实阶段 等价于 登录权限阶段
  2. 请求核实阶段 等价于 操作权限阶段

连接核实阶段
客户端用户连接请求中 提供 用户名,主机地址 ,用户密码 =》 mysql -hlocalhost -uroot -p
请求到达 mysql服务器时, 会于 mysql中的 user表 中的 user、host、authentication_string 三个字段匹配客户端信息

当连接核实阶段,通过,则进入 第二个阶段,即 请求阶段,否则 拒绝

请求核实阶段
在这里插入图片描述

连接请求核实通过后, 对此连接上进来的每个请求,服务器检查该请求要执行什么操作,是否有足够的权限来执行。这正是需要权限表中的权限列发挥作用的地方。这里的权限可以来自 user,db,tables_priv,columns_priv 等

确认权限时,是有顺序的, 从大权限到小权限
①mysql首先检查user表,如果没有指定的权限
②那么MySQL就会继续检查db表 db表是下一层安全层级,其中的权限限定于数据库层级,在该层级的select权限允许用户查看指定数据库的所有表中的数据;如果在该层级没有找到限定的权限,
③那么mysql就会继续 检查tables_priv表 ,tables_priv表是下一层安全层级,其中的权限限定于表的层级,在该层级的select权限允许用户查看指定表中的(所有列)数据;如果在该层级没有找到限定的权限,
④那么mysql就会继续 检查columns_priv表 ,

如果所有权限表都检查完毕,但还是没有找到允许的权限操作,mysql 将 返回错误信息 ,用户请求的操作不能执行,操作失败
在这里插入图片描述

角色管理

在这里插入图片描述
创建角色

create [IF NOT EXISTS] role ‘role1’[@‘xxx’, role2@‘xxx’, …rolen@‘xxx’] ;
create role admin ; ### 如果不写主机名,mysql默认是 %,意思这个角色对应的账号,可以在任何一台主机上登录数据库
多个角色中间用 逗号 隔开
create role ’app_read’@‘IP地址’ ,‘app_check’ ;
给角色授权,查看角色权限
show privileges\G 查看权限清单

GRANT role [, role] 数据库.表 TO user_or_role [, user_or_role] …[WITH ADMIN OPTION]

grant 权限列表 on 数据库.表 to ‘role_name’[@‘host_name’] ;
grant select on . to ‘devp’;
show grants for ’角色‘;
在这里插入图片描述

删除角色

删除了角色,那么用户也失去了通过这个角色获得的所有权限
drop role ‘role1’[@host_name’ ,…,‘rolen’@‘host_name’];

用户赋予角色

grant role [, role2,…] TO user1[, role2…] ;
在这里插入图片描述
在这里插入图片描述

激活角色

你用赋予角色的用户去登录,发现没有对应的权限,这是因为mysql 中创建的角色之后,默认都是没有激活的,也不能用,
必须手动激活,才能获取对应权限

在这里插入图片描述

激活
激活可以自己激活,不一定需要用root激活
方式1
– 设置默认角色
SET DEFAULT ROLE ‘devp’ TO ‘migo’@‘%’;
语法
SET DEFAULT ROLE {NONE | ALL | role [, role ] …} TO user [, user ] …
如果已经登录,需要退出,再登录才生效
在这里插入图片描述
在这里插入图片描述

方式2
将 active_all_roles_on_login 设置 on
查看 show variables like ’active_all_roles_on_login‘;
在这里插入图片描述
设置
set global active_all_roles_on_login=ON; # 对所有角色永久激活

方式3 my.ini
#设置角色激活开启
[mysqld]
activate-all-roles-on-login=ON

撤销用户的角色、撤销用户的权限,撤销角色的权限

撤销用户的角色
revoke [IF EXISTS] 角色[,角色n] from 用户[@host_name, 用户n@host_name];
撤销用户的权限
revoke [IF EXISTS] 权限列表 ON 数据库.表 from 用户[@host_name, 用户n@host_name];

在这里插入图片描述
撤销角色的权限
revoke 权限列表 on 数据库.表 from role1[@‘host_name’,…rolen@host_name];

在这里插入图片描述
在这里插入图片描述

设置强制角色(mandatory role)

强制(mandatory)角色 是给每个创建的用户默认的角色,不需要手动设置的,
强制角色 无法被回收 revoke 和 删除 drop

方式1 服务启动前设置
mg.ini
[mysqld]
mandatory_roles=‘role1,role2@localhost,role3@%’;
方式2 运行时设置 persist 持久性 重启服务 仍然生效
set persist mandatory_roles=‘role1,role2@localhost,role3@%’;
重新生效
set global mandatory_roles=‘role1,role2@localhost,role3@%’;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

<高阶数据结构>图

图 必要概念大致用途 存图邻接矩阵邻接表 遍历BFS(广度优先)DFS(深度优先) 最小生成树Kruskal算法Prim算法 寻最短路径Dijkstra算法 必要概念 图根据有无方向分为,有向图和无向图 组成:G (V, E) 顶点集合 V边的集合 E G(Graph),V(Vertex),E(Edge) 图可…

Docker容器:docker consul的注册与发现及consul-template

Docker容器:docker consul的注册与发现及consul-template守护进程 一.docker consul的注册与发现介绍 1.什么是服务注册与发现 (1)服务注册与发现是微服务架构中不可或缺的重要组件。 (2)为解决服务都是单节点的&a…

李沐pytorch学习-BatchNormalization

一、意义 在使用较深的网络时,BatchNormalization(批量归一化)几乎是必需的,可以加速收敛。 对于图1所示的全连接层神经网络,输出节点的GroundTruth为,损失函数为,则损失对权重的梯度为&#xf…

接口测试总结分享(http与rpc)

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。 一、了解一下HTTP与RPC 1. HTTP(H…

YOLOv5屏蔽区域检测(选择区域检测)

YOLOv5屏蔽区域检测以及选择区域检测 前期准备labelme选择mask区域 代码改动 前期准备 思路就是通过一个mask掩膜,对我们想要屏蔽或者选择的区域进行遮挡处理,在推理的时候,将有mask掩膜的图像输入,将最后的结果显示在原始图像上…

【Go 基础篇】Go语言中的自定义错误处理

错误是程序开发过程中不可避免的一部分,而Go语言以其简洁和高效的特性闻名。在Go中,自定义错误(Custom Errors)是一种强大的方式,可以为特定应用场景创建清晰的错误类型,以便更好地处理和调试问题。本文将详…

基于微信小程序的汽车租赁系统的设计与实现ljx7y

汽车租赁系统,主要包括管理员、用户二个权限角色,对于用户角色不同,所使用的功能模块相应不同。本文从管理员、用户的功能要求出发,汽车租赁系统系统中的功能模块主要是实现管理员后端;首页、个人中心、汽车品牌管理、…

算法通关村十三关 | 进制转换问题处理模板

1. 七进制数 题目&#xff1a;LeetCode504&#xff1a;504. 七进制数 - 力扣&#xff08;LeetCode&#xff09; 思路 进制转换&#xff0c;对几转换就是对几求余&#xff0c;最后将所有的余数反过来即可、如果num< 0&#xff0c;先取绝对值&#xff0c;再进行操作。 100转7…

MYSQL表的增删改查(单表)

文章目录 一、CRUD二、creat(新增)三、查询&#xff08;Retrieve&#xff09;四、修改&#xff08;update&#xff09;五、删除&#xff08;Delete&#xff09; 一、CRUD SQL 最核心的就是增删改查&#xff0c;后端开发工作中&#xff0c;遇到的最核心的操作也是这个 二、creat…

2023高教社杯数学建模思路 - 复盘:人力资源安排的最优化模型

文章目录 0 赛题思路1 描述2 问题概括3 建模过程3.1 边界说明3.2 符号约定3.3 分析3.4 模型建立3.5 模型求解 4 模型评价与推广5 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 描述 …

Blazor 依赖注入妙用:巧设回调

文章目录 前言依赖注入特性需求解决方案示意图 前言 依赖注入我之前写过一篇文章&#xff0c;没看过的可以看看这个。 C# Blazor 学习笔记(10):依赖注入 依赖注入特性 只能Razor组件中注入所有Razor组件在作用域注入的都是同一个依赖。作用域可以看看我之前的文章。 需求 …

string类中的一些问题

前言&#xff1a;C中的string类是继承C语言的字符数组的字符串来实现的&#xff0c;其中包含许多C的字符串的相关知识的同时&#xff0c;也蕴含很多的类与对象的相关知识&#xff0c;在面试中&#xff0c;面试官总喜欢让学生自己来模拟实现string类&#xff0c;最主要是实现str…

azure data studio SQL扩展插件开发笔记

node.js环境下拉取脚手架 npm install -g yo generator-azuredatastudio yo azuredatastudio 改代码 运行 调试扩展&#xff0c;在visual studio code中安装插件即可 然后visual studio code打开进行修改运行即可 image.png 运行后自动打开auzre data studio了&#xff0c; 下面…

开源与专有软件:比较与对比

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

中文乱码处理

&#x1f600;前言 中文乱码处理 &#x1f3e0;个人主页&#xff1a;尘觉主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&#x1f609;&#x1f609; 在csdn获奖荣誉: &#x1f3c…

kubernetes deploy standalone mysql demo

kubernetes 集群内部署 单节点 mysql ansible all -m shell -a "mkdir -p /mnt/mysql/data"cat mysql-pv-pvc.yaml apiVersion: v1 kind: PersistentVolume metadata:name: mysql-pv-volumelabels:type: local spec:storageClassName: manualcapacity:storage: 5Gi…

JVM第一篇 认识java虚拟机

目录 1. 什么是java虚拟机 2. java虚拟机分类 2.1. 商用虚拟机 2.2. 嵌入式虚拟机 3.java虚拟机架构 4.java虚拟机运行过程 1. 什么是java虚拟机 传统意义上的虚拟机是一种抽象化的计算机&#xff0c;通过在实际的计算机上仿真模拟各种计算机功能来实现的&#xff0c;是操…

数据结构入门 — 链表详解_单链表

前言 数据结构入门 — 单链表详解* 博客主页链接&#xff1a;https://blog.csdn.net/m0_74014525 关注博主&#xff0c;后期持续更新系列文章 文章末尾有源码 *****感谢观看&#xff0c;希望对你有所帮助***** 系列文章 第一篇&#xff1a;数据结构入门 — 链表详解_单链表 第…

突破边界:文本检测算法的革新与应用前景

突破边界&#xff1a;文本检测算法的革新与应用前景 1.文本检测理论篇&#xff08;文本检测方法介绍&#xff09; 文本检测任务是找出图像或视频中的文字位置。不同于目标检测任务&#xff0c;目标检测不仅要解决定位问题&#xff0c;还要解决目标分类问题。 文本在图像中的…

使用EventLog Analyzer 进行路由器监控

路由器是任何计算机网络的构建块&#xff0c;引导网络中的流量&#xff0c;管理员需要确保路由器已配置并正常工作&#xff0c;以确保网络安全。 监控路由器中的用户活动 在网络安全方面&#xff0c;与路由器相关的风险是一个严重的问题。具有松散安全策略的网络使入侵者可以…