MySQL 基础知识(八)之用户权限管理

news2024/11/27 1:34:44

目录

1 MySQL 权限管理概念

2 用户管理

2.1 创建用户

2.2 查看当前登录用户

2.3 修改用户名

2.4 删除用户

3 授予权限

3.1 授予用户管理员权限

3.2 授予用户数据库权限

3.3 授予用户表权限

3.4 授予用户列权限

4 查询权限

5 回收权限


1 MySQL 权限管理概念

        关于 MySQL 的权限简单的理解就是 MySQL 允许你做你权利以内的事情,不可以越界。比如只允许你执行 select 操作,那么你就不能执行 update 操作。存储账户权限信息的表主要有四个:user 表、db 表、tables_priv  表、columns_priv 表。

账户权限信息表:

  • user 表:user 表列出可以连接服务器的用户及其口令,并且它指定他们有哪种全局(超级用户、管理员)权限。在 user 表启用的任何权限均是全局权限,并适用于所有数据库。例如,如果你启用了 DELETE 权限,在这里列出的用户可以从任何表中删除记录,所以在你这样做之前要认真考虑。
  • db 表:db 表列出数据库,而用户有权限访问它们,在这里指定的权限适用于一个数据库中的所有表。
  • tables_priv 表:tables_priv 表指定表级权限,在这里指定的一个权限适用于一个表的所有列。
  • columns_priv 表:columns_priv 表指定列级权限,在这里指定的权限适用于一个表的特定列。

MySQL 用户权限管理主要有以下作用:

  • 可以限制用户访问哪些库、哪些表
  • 可以限制用户对哪些表执行 SELECT、CREATE、DELETE、DELETE、ALTER 等操作
  • 可以限制用户登录的 IP 或域名
  • 可以限制用户自己的权限是否可以授权给别的用户

MySQL 权限信息表的验证过程分为两个阶段:连接权限验证和执行权限验证

  • 先从 user 表中的 Host、User、Password (MySQL 8.0 版本没有 Password,有 authentication_string)这 3 个字段中判断连接的 IP、用户名、密码是否存在,存在则通过验证

  • 通过连接权限验证后,进行权限分配,按照 user、db、tables_priv、columns_priv 的顺序进行验证

    • 校验 user 表,对于全局权限是 ok → 直接执行
    • 检验 db 表,对于某个特定的数据库有权限 → 执行
    • 检验 tables_priv 表,对于特定数据库下的某些表是有权限 → 执行
    • 检验 columns_priv 表,对于特定表中的某些列有权限 → 执行 

 MySQL 的权限分布,权限分布就是针对表可以设置什么权限,针对列可以设置什么权限等等

权限分布

可能的设置的权限

表权限

'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter'

列权限

'Select', 'Insert', 'Update', 'References'

过程权限

'Execute', 'Alter Routine', 'Grant'

2 用户管理

2.1 创建用户

创建用户的格式

create user [用户名]@[访问地址] identified by [密码]

       访问地址(登录主机名)表示可以在哪些网络地址上登录账户连接(访问)数据库,可以为 'localhost'、'%' 或 '196.68.%' 这个网络下的地址等

  • 'localhost' 表示本机,IPv4 中 localhost 的地址为 '127.0.0.1'
  • '%' 通配符表示任何主机都可以连接

        设置相同的用户名,不同的访问地址(主机名),这样我们可以在不同的主机(网络地址)上登录账户连接数据。根据本文 1 MySQL 权限管理概念中的连接权限验证,只有当访问地址、用名名、密码验证通过后才能登录账户连接数据库。

# 创建本地登录的用户 test1,密码为 123456
create user 'test1'@'localhost' identified by '123456';

# 创建任何主机都可以连接的用户 test2,密码为 123456
create user 'test2'@'%' identified by '123456';

# 创建访问地址为'127.0.0.2' 的用户 test3,密码为 123456
create user 'test3'@'127.0.0.2' identified by '123456';

# 查看账号、访问地址、密码
select user, host, authentication_string from mysql.user;

在本地登录 test3 ,结果是:拒绝连接,因为没有 'test'@'localhost'

2.2 查看当前登录用户
# 查看当前登录的用户
select user();

select current_user();

2.3 修改用户名

rename 除了用来更改用户名外,还可以更改访问地址

# 更改用户名和访问地址
rename user 'test1'@'localhost' to 'test'@'%';

#查看用户名和访问地址
select user, host from mysql.user;

2.4 删除用户
# 删除用名为 test2、访问地址为 '%' 的用户
drop user 'test2'@'%';

3 授予权限

授权格式

grant [权限1,权限2,权限3] on [数据库].[表名] to [用户名]@[访问地址]
3.1 授予用户管理员权限
# 授予 'test1'@'localhost' 管理员权限
grant all privileges on *.* to 'test1'@'localhost' with grant option;

  • all privileges:表示将所有权限授予给用户。也可指定具体的权限,如SELECT、CREATE、DROP 等。
  • on:表示这些权限对哪些数据库和表生效,格式:数据库名.表名,这里写 “*” 表示当前数据库的所有表,“*.*” 表示所有数据库的所有表。如果要指定将权限应用到 test1 库的 user 表中,可以这么写:test1.user
  • to:将权限授予哪个用户
  • with grant option:允许被授权的用户把得到的权限继续授给其它用户
3.2 授予用户数据库权限
权限说明
select表示授予用户可以使用 select 语句访问特定数据库中所有表和视图的权限
insert表示授予用户可以使用 insert 语句向特定数据库中所有表添加数据行的权限
delete表示授予用户可以使用 delete 语句删除特定数据库中所有表的数据行的权限
update表示授予用户可以使用 update 语句更新特定数据库中所有数据表的值的权限
references表示授予用户可以创建指向特定的数据库中的表外键的权限
create表示授权用户可以使用 create table 语句在特定数据库中创建新表的权限
alter表示授予用户可以使用 alter table 语句修改特定数据库中所有数据表的权限
show view表示授予用户可以查看特定数据库中已有视图的视图定义的权限
create routine表示授予用户可以为特定的数据库创建存储过程和存储函数的权限
alter routine表示授予用户可以更新和删除数据库中已有的存储过程和存储函数的权限
execute routine表示授予用户可以调用特定数据库的存储过程和存储函数的权限
index表示授予用户可以在特定数据库中的所有数据表上定义和删除索引的权限
drop表示授予用户可以删除特定数据库中所有表和视图的权限
create temporary tables表示授予用户可以在特定数据库中创建临时表的权限
create view表示授予用户可以在特定数据库中创建新的视图的权限
lock tables表示授予用户可以锁定特定数据库的已有数据表的权限
all 或 all privileges表示以上所有权限
# 创建用户 test
create user 'test'@'localhost' identified by '123456';

# 授予用户 test 在 study 数据库中查询、创建、修改、删除表的权限以及创建视图的权限
grant select, create, alter, drop, create view on study.* to 'test'@'localhost';

# 查询用户 test 权限
show grants for 'test'@'localhost';

3.3 授予用户表权限

# 创建用户 learn1
create user 'learn1'@'localhost' identified by '123456';

# 授予用户 learn1 查询、创建、修改 study 数据库的 goods 表的权限
grant select, create, alter on study.goods to 'learn1'@'localhost';

# 查询用户 learn1 权限
show grants for 'learn1'@'localhost';

3.4 授予用户列权限
权限说明
select(字段)表示授予用户可以使用 select 语句访问特定列的权限
insert(字段)表示授予用户可以使用 insert 语句向一个特定列插入数据的权限
update(字段)表示授予用户可以使用 update 语句更新特定列的权限
# 创建用户 learn2
create user 'learn2'@'localhost' identified by '123456';

# 授予用户 learn2 查询、插入、更新 study 数据库的 goods 表的 name 列的权限
grant select(name), insert(name), update(name) on study.goods to 'learn2'@'localhost';

# 查询用户 learn2 权限
show grants for 'learn2'@'localhost';

4 查询权限

使用 show grants; 查询 root 的权限时会出错

# 查询当前用户权限
# show grants();

# 查询特定用户权限,如 learn2
show grants for 'learn2'@'localhost';

5 回收权限

回收权限格式

revoke [权限1,权限2,权限3] on [数据库].[表名] from [用户名]@[访问地址]

注意回收权限是回收已经授予的权限,不能回收没有的权限

# 回收用户 learn2 插入、更新 study 数据库的 goods 表的 name 列的权限
revoke insert(name), update(name) on study.goods from 'learn2'@'localhost';

# 查询你 用户 learn2 的权限
show grants for 'learn2'@'localhost';

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

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

相关文章

Java 和 JavaScript 的奇妙协同:语法结构的对比与探索(下)

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

2024 前端面试题(GPT回答 + 示例代码 + 解释)No.21 - No.40

本文题目来源于全网收集,答案来源于 ChatGPT 和 博主(的小部分……) 格式:题目 h3 回答 text 参考大佬博客补充 text 示例代码 code 解释 quote 补充 quote 上一篇链接:2024 前端面试题(GPT回答 示例…

【Java多线程】对进程与线程的理解

目录 1、进程/任务(Process/Task) 2、进程控制块抽象(PCB Process Control Block) 2.1、PCB重要属性 2.2、PCB中支持进程调度的一些属性 3、 内存分配 —— 内存管理(Memory Manage) 4、线程(Thread)…

【C++】:哈希和哈希桶

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关哈希和哈希桶的知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通…

前端网络安全笔记

本文主要涉及6个内容: HTTP与HTTPS同源策略(Same-origin policy,简称 SOP)/ 跨域资源共享(Cross-Origin Resource Sharing,简称 CORS)跨站脚本攻击(Cross-Site Scripting&#xff0…

Base64编码的优点与缺点

title: Base64编码的优点与缺点 date: 2024/2/16 14:06:37 updated: 2024/2/16 14:06:37 tags: Base64编码ASCII转换数据传输文本存储安全性数据膨胀字符串解码 Base64编码是一种将二进制数据转换为可打印ASCII字符的编码方式。它被广泛应用于数据传输和存储,以提升…

飞天使-k8s知识点18-kubernetes实操3-pod的生命周期

文章目录 探针的生命周期流程图prestop 探针的生命周期 docker 创建:在创建阶段,你需要选择一个镜像来运行你的应用。这个镜像可以是公开的,如 Docker Hub 上的镜像,也可以是你自己创建的自定义镜像。创建自己的镜像通常需要编写一…

基于Python实现的元宵节猜灯谜兑奖软件源码,输入灯谜序号,获取谜面及谜底

基于Python实现的元宵节猜灯谜兑奖软件源码,输入灯谜序号,获取谜面及谜底 核心代码: import sys from time import sleep import xlrd import os import tkintertable_listA "" table_listB ""filename os.getcwd()&…

重磅!谷歌宣布发布Gemini 1.5 Pro,距离Gemini发布仅仅一个半月!最高支持1000万上下文长度,GSM8K评测全球第一

本文原文来自DataLearnerAI官方网站: 重磅!谷歌宣布发布Gemini 1.5 Pro,距离Gemini发布仅仅一个半月!最高支持1000万上下文长度,GSM8K评测全球第一 | 数据学习者官方网站(Datalearner)https://www.datalearner.com/bl…

【题解】差分

差分其实就是前缀和的逆运算。 如果数组 A 是数组 B 的前缀和数组,则称 B 是 A 的差分数组。 思路 由题意得,应该求给定数组的差分数组。 差分加速的原理 对 L 到 R 区间内的数加上 c,时间复杂度是O(c) ,即O(n) 。 但是如果…

c++阶梯之类与对象(下)

前文: c阶梯之类与对象(上)-CSDN博客 c阶梯之类与对象(中)-CSDN博客 c阶梯之类与对象(中)< 续集 >-CSDN博客 1. 再谈构造函数 1.1 构造函数体赋值 在创建对象时&a…

C# VS2022+WinForm+Oracle19.3+Excel,根据数据库表定义书生成SQL

目标: 用Excel写数据库的表的定义书,用该工具生成SQL,在客户端执行,把表结构导入数据库,生成真正的表 Github代码下载 目录 0.完成下面开发环境的准备1 操作系统Win11 专业版 21H22 oracle 19.33 Visual Studio Commun…

transformer-Attention is All You Need(一)

1. 为什么需要transformer 循环模型通常沿输入和输出序列的符号位置进行因子计算。通过在计算期间将位置与步骤对齐,它们根据前一步的隐藏状态和输入产生位置的隐藏状态序列。这种固有的顺序特性阻止了训练样本内的并行化,这在较长的序列长度上变得至关重…

Java中的Queue队列的基本讲解

目录 一、创建队列 二、Queue的一些常用方法 对于队列的概念我就不多说了吧,先进先出,比如1,2,3进入队列,出队列也是1,2,3。这里我主要说的是在Java中如何创建和使用队列。 一、创建队列 队列的创建,也可以说是队列的实例化。 Q…

精炼爆炸性新闻!OpenAI发布革命性AI视频生成模型Sora:实现长达60秒的高清视频创作「附AIGC行业系统搭建」

在人工智能领域,每一次技术革新都引领着未来的发展方向。OpenAI,作为全球领先的人工智能研究机构,再次证明了其在推动AI技术革新方面的领导地位。近日,OpenAI宣布推出了一款革命性的AI视频生成模型——Sora,这一大胆的…

Dart 3.3 发布:扩展类型、JavaScript Interop 等

参考链接:https://medium.com/dartlang/dart-3-3-325bf2bf6c13 跟随 Flutter 3.19 发布的还有 Dart 3.3 ,Dart 3.3 主要包含扩展类型增强,性能优化和 native 代码交互推进,例如本次改进的JavaScript Interop 模型就引入了类型安全…

【lesson56】生产者消费者模型

文章目录 学习生产者消费者模型过程中要回答的两个问题生产者消费者模型的概念基于阻塞队列的生产者消费者模型编码实现Common.hLockGuard.hppCondtion.hppBlockQueue.hppTask.hppConProd.cc 学习生产者消费者模型过程中要回答的两个问题 1.条件变量是在条件满足的时候&#x…

使用 XML 和 YAML 文件的文件输入和输出

目标 您将找到以下问题的答案: 如何使用YAML或XML文件打印和读取文件和OpenCV的文本条目?如何对 OpenCV 数据结构做同样的事情?如何为您的数据结构执行此操作?使用 OpenCV 数据结构,例如 cv::…

SolidWorks如何在一个零件的基础上绘制另一个零件

经过测试,新建零件,然后插入零件a,在a的基础上绘制b,这种做法无法断开a与b的联系。虽然可以通过切除命令,切除b,但不是正途。 在装配体中可以实现: (1)建立装配体 (2&…

在线黑色响应式全屏滚动主页html源码

html5黑色大气的个人博客全屏滚动个人主页源码 右键记事本即可修改 直接上传服务器空间就可使用