【MySQL】MySQL权限管理

  • 权限范围
    • 管理权限
    • 动态权限
  • 授权
    • 显示 GRANT 权限
  • 撤销权限
  • 激活角色
    • 在服务器级别激活角色
    • 在用户级别激活角色
    • 在会话级别激活角色
  • 感谢 💖

在上一篇文章【MySQL】MySQL里的用户账户和角色是什么?如何管理?中,我们了解了MySQL中用户与角色的基本管理,包括创建、删除、查看等操作。这篇文章我们来看下MySQL里对用户和角色的权限管理。

权限范围

MySQL允许我们在不同级别向用户帐户授予多种类型的权限。
也就是限制这个用户在什么范围内能做哪些事儿。

访问级别有:

  • Global 任何数据库中的任何表
  • Database 针对特定的数据库
  • Table 针对特定的表
  • Column 针对表中特定的列
  • Stored routine 针对特定的存储例程(一种数据库对象,用于封装一系列的SQL语句和逻辑操作)

根据不同的访问要求的用户权限:

  • 只读用户:全局、数据库或表级别权限,例如 SELECT
  • 修改数据库的用户:全局、数据库或表级别权限,例如 INSERT、UPDATE、DELETE、 CREATE、ALTER 和 DROP
  • 管理用户:全局级别权限,例如 FILE、 PROCESS、SHUTDOWN 和 SUPER

管理权限

在全局级别授予管理权限可以启用以下活动:

  • FILE:允许运行 SQL 语句,在服务器主机文件系统中读写文件
  • PROCESS:允许使用 SHOW PROCESSLIST 语句查看客户端正在执行的所有语句
  • SHOW DATABASES:允许使用 SHOW DATABASES 语句列出所有数据库信息
  • SHUTDOWN:允许使用 SHUTDOWN 和 RESTART 语句、mysqladmin shutdown 命令和mysql_shutdown() C API 函数
  • RELOAD:允许执行 FLUSH 语句以重新加载日志和权限表

动态权限

动态权限是在服务器启动期间或由服务器组件或插件定义的运行时权限。 部分动态权限包括:

  • AUDIT_ADMIN:允许在 audit_log 插件中配置审计日志设置
  • FIREWALL_ADMIN:允许在 MYSQL_FIREWALL 插件中管理防火墙规则
  • GROUP_REPLICATION_ADMIN:允许配置、启动和停止组复制
  • ROLE_ADMIN:允许授予和撤销角色并设置 mandatory_roles 系统变量的值
  • REPLICATION_SLAVE_ADMIN:允许配置从属服务器并启动和停止复制
  • SYSTEM_VARIABLES_ADMIN:允许使用 SET GLOBAL 和 SET PERSIST 语句更改全局系统变量

授权

我们使用GRANT 语句为 MySQL 用户帐户和角色分配权限或角色。

GRANT 语句的子句包括:

  • 要授予的权限
    • 例如:SELECT, UPDATE, DELETE
  • 权限级别:
    • 全局:*.*
    • 数据库:db_name.*
    • 表:db_name.table_name
    • 存储例程:db_name.routine_name
  • 被授予权限的帐户或角色

示例:

下面这条语句将授予本地主机上的kari用户对 “mysql” 数据库中的 “user” 表执行 SELECT 操作的权限。

GRANT SELECT(user,host) ON mysql.user TO kari@localhost;

将角色授予 MySQL 用户帐户和其他角色时, GRANT 语句不带 ON 子句。同时,加上WITH ADMIN OPTION 子句允许用户将角色授予其他用户帐户。

示例:

下面这条语句授予了一个角色 “r_world” 两个其他角色的权限,即 “r_viewer” 和 “r_updater”。这意味着 “r_world” 角色将继承 “r_viewer” 和 “r_updater” 角色的权限,使得具有 “r_world” 角色的用户能够执行这些角色所拥有的权限。

GRANT r_viewer, r_updater TO r_world;

下面这条语句将两个角色 “r_viewer” 和 “r_updater” 的权限授予了用户 “kari” 在 “localhost” 主机上,并使用了 WITH ADMIN OPTION 子句。这意味着用户 “kari” 将获得这两个角色的权限,同时还具有管理这两个角色的能力,即可以将这些角色授予其他用户。这样的操作需要谨慎使用,只应该赋予受信任的管理员,以确保角色的安全性和适用性。

GRANT r_viewer, r_updater TO kari@localhost WITH ADMIN OPTION;

MySQL 的授权功能允许我们细粒度地管理权限,从而确保用户和角色具有适当的权限来执行数据库操作。但请务必谨慎使用,遵循最佳实践,只授予必要的权限,以降低潜在的风险。

显示 GRANT 权限

  • 使用 SHOW GRANTS 显示可以自己的帐户权限。
  • 使用 SHOW GRANTS FOR 指定帐户名称可以查看该帐户的权限。

撤销权限

使用 REVOKE 语句可以从用户帐户和角色中撤销权限和角色。

REVOKE 语句的语法有以下子句:

  • REVOKE 关键字:指定要撤销的权限或角色列表
  • ON 子句:指示要撤销权限的级别,但撤销角色时不需要
  • FROM 子句:指定帐户名或角色名

在发出 REVOKE 之前,一定要使用 SHOW GRANTS 语句来确定要撤销哪些权限和角色,之后再次确认结果是否正确。

示例:

下面这条语句的作用是从用户 ‘Amon’ 在 ‘localhost’ 主机上撤销对 ‘world’ 数据库中所有表执行 DELETE、INSERT 和 UPDATE 操作的权限

REVOKE DELETE, INSERT, UPDATE ON world.* FROM 'Amon'@'localhost';

下面是从用户 ‘Sasha’ 在 ‘localhost’ 主机上撤销所有权限以及授予权限的能力。

REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'Sasha'@'localhost';

激活角色

在用户可以利用特定角色授予的权限之前,这些角色需要被激活。激活实际上是为特定用户启用角色,以便他们可以使用其关联的权限。

角色可以在系统的不同级别上被激活:

  • 服务器级别: 可以在服务器级别激活角色。这可能意味着角色可以在整个系统或应用程序中使用
  • 用户级别: 可以为单个用户激活角色。这意味着特定用户被授予了与已激活角色相关联的权限
  • 会话级别: 角色还可以在会话级别激活。会话是用户与系统之间的交互期间。在会话级别激活角色意味着用户可以在会话期间使用关联的权限

用户只能激活已授予他们自己的角色

在服务器级别激活角色

将 activate_all_roles_on_login 系统变量设置为:

  • ON:服务器在登录时激活授予每个帐户的所有角色
  • OFF (默认值):服务器在登录时激活使用 SET DEFAULT ROLE 指定的默认角色(如果有的话)

示例:

SET PERSIST activate_all_roles_on_login = ON;

在用户级别激活角色

SET DEFAULT ROLE 语句定义当用户连接到服务器时哪些角色(可以是ALL或NONE)变为活动角色。或者在 CREATE USER 或 ALTER USER 语句中使用 DEFAULT ROLE 子句。

用户级默认角色存储在 mysql.default_roles 授权表中。

示例:

SET DEFAULT ROLE r_viewer, r_updater TO kari@localhost;
ALTER USER kari@localhost DEFAULT ROLE ALL;

在会话级别激活角色

使用 SET ROLE 语句可以修改当前会话中的活动角色列表。 它接受角色列表或以下角色说明符之一:

  • DEFAULT:激活帐户默认角色
  • NONE:禁用所有角色
  • ALL:激活授予该帐户的所有角色
  • ALL EXCEPT:激活授予帐户的所有角色,但指定的角色除外

感谢 💖

好啦,这次的分享就到这里,感谢大家看到这里🤞

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

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

相关文章

【二维差分】

二维差分 #include<iostream> using namespace std; const int N 100011;int n,m,q;int a[N][N],b[N][N];int main(){cin>>n>>m>>q;for(int i1;i<n;i)for(int j1;j<m;j)cin>>a[i][j];for(int i1;i<n;i)for(int j1;j<m;j)b[i][j] …

jmeter+nmon+crontab简单的执行接口定时压测

一、概述 临时接到任务要对系统的接口进行压测&#xff0c;上面的要求就是&#xff1a;压测&#xff0c;并发2000 在不熟悉系统的情况下&#xff0c;按目前的需求&#xff0c;需要做的步骤&#xff1a; 需要有接口脚本需要能监控系统性能需要能定时执行脚本 二、观察 >针…

后端开发基础概念

后端开发基础概念 目前处于项目上手阶段&#xff0c;在学习项目过程中&#xff0c;有一些一知半解或者不明白含义的专业名词或者缩写&#xff0c;在此汇总。里面的内容很多都是基于个人理解&#xff0c;水平有限如果有出错的地方还请各位大佬批评指正。 2023年8月31日00:34:22…

恒运资本:市盈率怎么算?

市盈率&#xff08;P/E ratio&#xff09;是判别一家公司股票价格合理性的一个重要目标&#xff0c;也是投资者评估公司股票投资价值的重要参阅目标。市盈率越高&#xff0c;表明相对于公司的收益来说&#xff0c;该公司的股票定价越高。市盈率越低&#xff0c;则表明该股票被低…

App与小程序工具总结

文章目录 前言Burpsuite抓包问题LPosedJustTrustMe 绕过 SSL Pining小程序的反编译APP脱壳&#xff0c;反射大师、frida反射大师Frida 总结 前言 在进行渗透工作的时候&#xff0c;遇到过的App、小程序也不少了&#xff0c;有简单的&#xff0c;也有加固的比较不错的&#xff…

聊聊mybatis-plus的SafetyEncryptProcessor

序 本文主要研究一下mybatis-plus的SafetyEncryptProcessor SafetyEncryptProcessor mybatis-plus-boot-starter/src/main/java/com/baomidou/mybatisplus/autoconfigure/SafetyEncryptProcessor.java public class SafetyEncryptProcessor implements EnvironmentPostProc…

技术深入解析与教程:网络安全技术探秘

第一章&#xff1a;引言 在当今数字化时代&#xff0c;网络安全已经成为了重要议题。随着各种信息和业务在网络上的传输与存储&#xff0c;安全问题也日益突出。本文将带您深入探讨网络安全领域中的关键技术&#xff0c;涵盖渗透测试、漏洞挖掘以及恶意软件分析等方面&#xf…

PCD点云文件外部框框坐标计算

PCD点云文件直接提取的是点云的坐标&#xff0c;不是最外面的box的坐标&#xff0c;因此可以通过&#xff1a; max_b octree.get_max_bound() min_b octree.get_min_bound()分别得到最大最小的xyz坐标&#xff0c;之后进行计算 点的序号和位置对应如下&#xff1a; 所有的…

【数据结构与算法 模版】高频题刷题模版

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【】&#xff0c;使用【】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&#xff1a;目标公…

vue 在IOS移动端中 windon.open 等跳转外部链接后,返回不触发vue生命周期、mounted等相关事件-解决方法

做了一个列表的h5页面&#xff0c;通过点击列表跳转到外部链接&#xff0c;然后返回是回到原来页面状态&#xff0c;类似缓存。发现在ios端返回后&#xff0c;vue 的mounted() 、create()、路由监听等方法都不会执行。在安卓和pc 端都能正常调用。 解决方案&#xff1a;监听pa…

一篇文章学会C#的正则表达式

https://blog.csdn.net/qq_38507850/article/details/79179128 正则表达式 一句话概括就是用来对字符串根据自己的规则进行匹配的&#xff0c;可以匹配(返回)出符合自己要求的匹配结果&#xff0c;有人说字符串类的函数也可以&#xff0c;确实是这样&#xff0c;但是字符串的函…

软考A计划-网络工程师-复习背熟-路由器与交换配置和网络安全

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

ARM DIY(五)摄像头调试

前言 今天&#xff0c;就着摄像头的调试&#xff0c;从嵌入式工程师的角度&#xff0c;介绍如何从无到有&#xff0c;一步一步地调出一款设备。 摄像头型号&#xff1a;OV2640 开发步骤 分为 2 个阶段 5 个步骤 阶段一&#xff1a; 设备树、驱动、硬件 阶段二&#xff1a; 应…

【SpringBoot】详细介绍Spring Boot中@Component

在Spring Boot中&#xff0c;Component是一个通用的注解&#xff0c;用于标识一个类是Spring框架中的组件。Component注解是Spring的核心注解之一&#xff0c;它提供了自动扫描和实例化bean的功能。 具体来说&#xff0c;Component注解的作用是将一个普通的Java类转化为Spring…

《C和指针》笔记18:前缀++ 和后缀++

C 语言里有前缀 和后缀&#xff0c;使用还是有点不同的。对应的还有--操作符&#xff0c;但它们的工作原理与此相同&#xff0c;只是它所执行的是减值操作而不是增值操作。我们只要掌握的原理&#xff0c;--的原理也就知道了。 在这里我们把符号叫做操作符&#xff0c;把它操作…

【跟小嘉学 Rust 编程】二十、进阶扩展

系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学…

拿来即用修改密码功能

<template><div><!-- 重置密码 --><el-dialogtitle"修改密码"v-model"state.resetPwdDialogVisible":showClose"state.firstLogin ! 1"width"550px"close"onCancel":close-on-click-modal"false&…

uniapp结合Canvas+renderjs根据经纬度绘制轨迹(二)

uniapp结合Canvasrenderjs根据经纬度绘制轨迹 文章目录 uniapp结合Canvasrenderjs根据经纬度绘制轨迹效果图templaterenderjsjs数据结构 ​ 根据官方建议要想在 app-vue 流畅使用 Canvas 动画&#xff0c;需要使用 renderjs 技术&#xff0c;把操作canvas的js逻辑放到视图层运…

Python爬虫框架之Selenium库入门:用Python实现网页自动化测试详解

概要 是否还在为网页测试而烦恼&#xff1f;是否还在为重复的点击、等待而劳累&#xff1f;试试强大的Selenium&#xff01;让你的网页自动化测试变得轻松有趣&#xff01; 一、Selenium库到底是什么&#xff1f; Selenium 是一个强大的自动化测试工具&#xff0c;它可以让你直…

华为 连接OSPF和RIP网络---OSPF和RIP网络相互引入

路由引入简介 不同路由协议之间不能直接共享各自的路由信息&#xff0c;需要依靠配置路由的引入来实现。 获得路由信息一般有3种途径&#xff1a;直连网段、静态配置和路由协议。可以将通过这3种途径获得的路由信息引入到路由协议中&#xff0c;例如&#xff0c;把直连网段引入…