MySQL:数据库权限与角色
权限
MySQL 的权限管理系统是保障数据库安全性的关键组件之一。它允许数据库管理员精确控制哪些用户可以对哪些数据库对象执行哪些操作。
自主存取控制 DAC
(DiscretionaryAccess Control):用户对于不同的数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,用户可以“自主”地决定将数据的存取权限授予何人、决定是否也将“授权数据库安全性控制的权限授予别人。
SQL 中使用 GRANT
语句向用户授予对数据操作的权限,REVOKE
语句收回已经授予用户的权限。
权限的类型
MySQL的权限类型涵盖了用户对数据库和数据库对象可以执行的各种操作,包括但不限于以下几种:
-
SELECT:允许用户查询表中的数据。
-
INSERT:允许用户向表中插入新的数据行。
-
UPDATE:允许用户更新表中的数据。
-
DELETE:允许用户从表中删除数据。
-
CREATE:允许用户创建新的数据库、表、索引等对象。
-
DROP:允许用户删除数据库、表、索引等对象。
-
ALTER:允许用户修改表结构,如添加或删除列、修改列的数据类型等。
-
INDEX:允许用户创建或删除索引。
-
CREATE ROUTINE:允许用户创建存储过程或函数。
-
ALTER ROUTINE:允许用户修改或删除存储过程或函数。
-
EXECUTE:允许用户执行存储过程或函数。
-
GRANT OPTION:允许用户将自己拥有的权限授予其他用户。
-
SUPER:超级权限,允许用户执行一些高级管理任务,如关闭MySQL服务、更改全局变量等。
此外,还有如USAGE(连接权限,无实际操作权限)、FILE(对服务器主机上文件的访问权限)、PROCESS(查看服务器中所有会话的权限)、SHUTDOWN(关闭服务器的权限)等权限。
权限的级别
MySQL 的权限按其作用范围可分为不同的级别,这些级别从大到小依次为:
-
全局级别(Global Level)
-
权限控制整个MySQL服务器上的操作,对所有数据库、表和列都有效。
-
使用
*.*
来指定授权范围,例如GRANT ALL PRIVILEGES ON *.* TO 'user'@'host';
。 -
权限信息存储在
mysql.user
表中。
-
-
数据库级别(Database Level)
-
权限限制用户对指定数据库的操作,包括对该数据库中所有表和列的访问。
-
使用
database_name.*
来指定授权范围,例如GRANT SELECT, INSERT ON database_name.* TO 'user'@'host';
。 -
权限信息存储在
mysql.db
表中。
-
-
表级别(Table Level)
-
权限控制用户对具体表的操作,如查询、插入、更新和删除表中的记录。
-
使用
database_name.table_name
来指定授权范围,例如GRANT UPDATE ON database_name.table_name TO 'user'@'host';
。 -
权限信息存储在
mysql.tables_priv
表中。
-
-
列级别(Column Level)
-
权限控制用户对表中指定列的访问,这是MySQL权限系统中最细粒度的控制。
-
使用
database_name.table_name(column_name1, column_name2, ...)
来指定授权范围。 -
权限信息存储在
mysql.columns_priv
表中。
-
-
例行程序级别(Routine Level)
-
权限控制用户对存储过程和函数的访问,包括执行、修改和删除存储过程或函数。
-
使用
PROCEDURE
或FUNCTION
关键字以及具体的存储过程或函数名来指定授权范围。 -
权限信息存储在
mysql.procs_priv
表中。
-
通过合理设置不同级别的权限,数据库管理员可以确保数据库的安全性和数据的完整性,同时满足不同用户对数据库资源的访问需求。在实际应用中,建议遵循最小权限原则,即只授予用户完成其工作所需的最小权限集,以减少潜在的安全风险。
权限的管理
授权权限 GRANT
在 MySQL 中,使用 GRANT
语句 授予指定用户对指定操作对象的指定操作权限。可以根据需要为用户分配特定的权限。
执行 GRANT
语句需要具有相应权限的用户才能执行:
- DBA
- 数据库对象的创建者
- 已经拥有该权限的用户
语法如下:
GRANT <Privilege> [,Privilege2, ...]
ON [obj_type]<obj_name>[,<obj2_type><obj2_name>]...
TO <username>[,usernames,...]
[@'IP']
[WITH GRANT OPTION];
-
<Privilege>
: 指定要授予的权限。可以使用特定的权限关键字,比如 SELECT、INSERT、UPDATE、DELETE、CREATE、DROP 等,也可以使用 ALL PRIVILEGES 来表示所有权限。 -
[obj_type]
: 指定对象的类型,例如 TABLE、DATABASE、PROCEDURE 等。如果不指定,默认为 TABLE。 -
<obj_name>
: 指定对象的名称,可以是表名、数据库名、过程名等。如果要授予多个对象的权限,可以使用逗号分隔它们。 -
<username>
: 指定要授予权限的用户名。可以是一个具体的用户名,也可以使用 PUBLIC 来表示所有用户。
可选项:
-
'IP'
: 如果指定了 IP 地址,则表示要授予该 IP 地址的用户相应的权限。可以使用具体的 IP 地址,也可以使用通配符 ‘%
’ 来表示任意 IP 地址。 -
WITH GRANT OPTION
:SQL标准允许具有 WITH GRANT OPTION 的用户把自己拥有的权限或其子集传递授予其他用户,但不允许循环授权,即被授权者不能把权限再授回给授权者或其祖先。建议只将 WITH GRANT OPTION 授予具有适当权限的管理员或特定需要此功能的用户。 -
发出该
GRANT
语句的可以是数据库管理员,也可以是该数据库对象创建者(即属主owner),还可以是已经拥有该权限的用户。 -
接受权限的用户可以是一个或多个具体用户,也可以是 PUBLIC,即全体用户。
刷新权限
授予用户权限后,可以使用 FLUSH PRIVILEGES
语句刷新权限,使授权更改生效。
FLUSH PRIVILEGES;
创建用户的同时授权
使用 GRANT
语句,可以在创建用户的同时,为用户授权:
GRANT privilege ON database.table_name
TO 'username'[@'ip']
[WITH GRANT OPTION];
示例
- 授予用户
user1
对表employees
的 SELECT,INSERT 和 UPDATE 特定列 Sname 的权限:
GRANT SELECT, INSERT, UPDATE(Sname)
ON TABLE employees TO user1;
- 授予用户
user2
和user3
对数据库ecommerce
的所有权限,并允许该用户将自己拥有的权限授予其他用户:
GRANT ALL PRIVILEGES ON ecommerce.*
TO user2,user3
WITH GRANT OPTION;
- 授予用户
user4
对表orders
和customers
的 DELETE 权限,并限制仅允许从特定的 IP 地址登录:
GRANT DELETE ON orders,customers TO user4 @'192.168.0.100';
查看用户权限
查看已经授权给用户权限信息:
SHOW GRANTS FOR 'username'@'host'
查看创建用户的语句:
SHOW CREATE USER 'username'@'host'
收回权限 REVOKE
在 MySQL 中,使用 REVOKE
语句收回某用户的权限,可以使已被授权的用户失去其指定权限。
只有拥有 GRANT OPTION
权限的账户才能够执行 REVOKE
命令并从其他用户账户中撤销权限。
REVOKE <Privilege> [,Privilege2, ...]
ON [obj_type]<obj_name>[,<obj2_type><obj2_name>]...
FROM <username>[,usernames,...]
[@'IP']
[CASCADE|RESTRICT];
-
<Privilege>
:要收回的权限,如 SELECT、INSERT、UPDATE、DELETE 等。 -
obj_type
:可选部分,指定对象的类型,如 TABLE、PROCEDURE 等。如果不指定,默认为 TABLE。 -
obj_name
:要收回权限的对象的名称。 -
<username>
:指定要收回权限的用户,可以是单个用户或多个用户。 -
[@'IP']
:可选部分,指定用户的主机名或 IP 地址。如果不指定,默认为所有主机。 -
[CASCADE|RESTRICT]
:可选部分,用于指定是否级联撤销权限或限制撤销权限。- CASCADE 表示级联撤销(收回某用户权限的同时也会把该用户所有授权过用户的权限一并收回)
- RESTRICT 表示限制(只收回指定的用户权限)。
示例
通常情况下,REVOKE
应该与 GRANT
保持一致,即撤销时应该指定与 GRANT
相同的权限、数据库和表,并取消所有选项,包括 WITH GRANT OPTION
。这样可以确保权限被正确、彻底地收回。
- 收回用户
user1
对表employees
的 SELECT 和 INSERT 权限:
REVOKE SELECT,INSERT ON employees FROM user1;
- 收回用户
user2
对数据库ecommerce
中所有表的 ALL PRIVILEGES 权限:
REVOKE ALL PRIVILEGES ON ecommerce.* FROM user2@'host';
REVOKE
只会撤销已经授予的权限,未授权的权限无法被收回。除非用户重新授权,否则收回权限后,用户将无法再执行与该权限相关的操作。
数据库角色
数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。因此,可以为一组具有相同权限的用户创建一个角色,使用角色来管理数据库权限可以简化授权的过程。
在创建数据库时,管理员通常会分配给每个用户一个特定的角色,并指定一组权限和访问权限,以便他们仅能够执行与其角色相关联的操作。这有助于提高数据的安全性和管理。
MySQL 8.0 引入了角色(Role)的概念,可以方便地为用户分配和管理权限。角色使管理员能够更好地管理用户权限并简化权限管理过程。
要使用角色功能,需要在 MySQL 中启用角色授权。在 my.cnf 或 my.ini 文件中,确保 --default-authentication-plugin=mysql_native_password
和 --enable-named-roles
参数被启用。
角色与用户的关系
-
用户可以被赋予一个或多个角色。
-
用户登录后,可以使用
SET ROLE
命令激活或取消激活特定的角色。 -
用户的权限由其自身权限和激活的角色权限共同决定。
角色的继承
-
当一个角色被授予另一个角色时,被授予的角色会继承所有直接授予它的权限,以及间接通过其他角色授予的权限。
-
角色的权限继承是递归的,这意味着如果一个角色被授予了另一个角色,那么它也会继承所有被间接授予的权限。
操作与管理角色
在 MySQL 中首先用 CREATE ROLE
语句创建角色,然后用 GRANT
语句给角色授权,用 REVOKE
语句收回授予角色的权限。
创建角色
使用 CREATE ROLE
命令创建一个新的角色。角色名称应符合 MySQL 的标识符命名规则。
CREATE ROLE 'role_name';
向角色授权
使用 GRANT
命令向角色授予特定的权限。
GRANT privilege
ON [obj_type]'obj_name'
TO 'role_name'[,'role2',...];
-
privilege
是要授予的角色权限 -
obj_type
和obj_name
表示权限作用的对象类型和名称。
将角色授予用户或其他角色
使用 GRANT
命令将一个或多个角色授予用户或其他角色。
GRANT 'role1'[,'role2',...]
TO ['role3'|'username'][,...]
[WITH ADMIN OPTION]
-
如果指定了
WITH ADMIN OPTION
子句,则获得某种权限的角色或用户还可以把这种权限再授予其他的角色。 -
一个角色包含的权限:包括直接授予这个角色的全部权限加上其他角色授予这个角色的全部权限。
收回角色的权限
使用 REVOKE
命令从角色中收回特定的权限。
REVOKE privilege
ON ['obj_type']'obj_name'
FROM 'role1'[,'role2',...];
只有拥有 GRANT OPTION
权限的账户才能够执行 REVOKE
命令并从其他用户账户中撤销权限。
删除角色
使用 DROP ROLE
命令删除一个角色。在删除角色之前,请确保没有用户正使用该角色,否则可能会导致权限混乱。
DROP ROLE 'role_name'
相关文章:
MySQL:数据库权限与角色
权限 MySQL 的权限管理系统是保障数据库安全性的关键组件之一。它允许数据库管理员精确控制哪些用户可以对哪些数据库对象执行哪些操作。 自主存取控制 DAC(DiscretionaryAccess Control):用户对于不同的数据库对象有不同的存取权限,不同的…...
等保测评练习卷25
等级保护初级测评师试题25 姓名: 成绩: 一、判断题(10110分) 1.安全区域边界对象主要根据系统中网络访问控制设备的部署情况来确定()不是网络访问控制设备而…...
《python语言程序设计》2018第6章第28题 掷骰子 两个色子,分别是1到6
2、3、12 玩家输 7、11玩家赢 4、5、6、8、9、10算1点,之后出7玩家输或者和上一次相同。def rolled(num_t):count 0still_win 0second_win 0still_lose 0second_lose 0while count < num_t:a_1 random.randint(1, 6)b_1 random.randint(1, 6)tTen a_1 b…...
Java方法递归
目录 1.方法递归调用 基本介绍 递归能解决什么问题? 八皇后问题 递归举例 递归重要规则 练习 2.递归调用应用实例-迷宫问题 3.递归调用实例-汉诺塔 4.递归调用实例-八皇后问题 1.方法递归调用 基本介绍 简单来说,递归就是自己调用自己。 …...
目标跟踪那些事
目标跟踪那些事 跟踪与检测的区别 目标跟踪和目标检测是计算机视觉中的两个重要概念,但它们的目的和方法是不同的。 目标检测(object Detection):是指在图像或视频帧中识别并定位一个或多个感兴趣的目标对象的过程 。 目标跟踪(object Tracking)&…...
【Git】 如何将一个分支的某个提交合并到另一个分支
【Git】 如何将一个分支的某个提交合并到另一个分支 在使用 Git 进行版本控制时,常常会遇到这样的需求:将某个分支的特定提交合并到另一个分支中。这种情况下,我们可以使用 cherry-pick 命令来实现。本文将详细介绍 cherry-pick 命令的使用方…...
【嵌入式之RTOS】什么是消息队列
目录 一、FreeRTOS消息队列的基本概念 二、FreeRTOS消息队列的工作原理 三、FreeRTOS消息队列的特点 四、FreeRTOS消息队列的应用 五、示例 消息队列是一种用于任务间通信的机制,它允许一个任务(生产者)向消息队列发送消息,而…...
9-springCloud集成nacos config
本文介绍spring cloud集成nacos config的过程。 0、环境 jdk 1.8maven 3.8.1Idea 2021.1nacos 2.0.3 1、项目结构 根项目nacos-config-sample下有两个module,这两个module分别是两个springboot项目,都从nacos中获取连接mysql的连接参数。我们开工。 …...
市场主流 AI 视频生成技术的迭代路径
AI视频生成技术的迭代路径经历了从GANVAE、Transformer、Diffusion Model到Sora采用的DiT架构(TransformerDiffusion)等多个阶段,每个阶段的技术升级都在视频处理质量上带来了飞跃性的提升。这些技术进步不仅推动了AI视频生成领域的快速发展&…...
移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——1.c++入门(2)
1. 函数重载 C⽀持在同⼀作⽤域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者 类型不同。这样C函数调⽤就表现出了多态⾏为,使⽤更灵活。C语⾔是不⽀持同⼀作⽤域中出现同 名函数的。 #include<iostream> u…...
【Python系列】深入理解 Python 中的 `nonlocal` 关键字
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
Flask目录结构路由重定向简单实例讲解——轻量级的 Python Web 框架
假设一个flask目录结构如下: my_flask_app/ │ ├── app.py ├── routes/ │ ├── __init__.py │ ├── ZhejiangProvince/ │ │ ├── __init__.py │ │ ├── la.py │ │ └── el.py │ ├── GuangdongProvince/ │ │ ├…...
破解PyCharm插件更新难题:让IDE焕发新生
破解PyCharm插件更新难题:让IDE焕发新生 PyCharm作为业界领先的集成开发环境(IDE),其丰富的插件生态是其强大功能的重要来源。然而,插件无法更新的问题可能会困扰许多用户,影响开发体验。本文将详细介绍如…...
cmake常用命令学习
1.include https://blog.csdn.net/qq_38410730/article/details/102677143 CmakeLists.txt才是cmake的正统文件,而.cmake文件是一个模块文件,可以被include到CMakeLists.txt中。 include指令一般用于语句的复用,也就是说,如果有…...
K8S可视化管理平台KubeSphere
什么是 KubeSphere ? KubeSphere 是一款开源项目,在目前主流容器调度平台 Kubernetes 之上构建的企业级分布式多租户容器管理平台,提供简单易用的操作界面以及向导式操作方式,在降低用户使用容器调度平台学习成本的同时ÿ…...
Bugku-CTF-聪明的php
pass a parameter and maybe the flag files filename is random :> 传递一个参数,可能标记文件的文件名是随机的: 于是传一下参,在原网页后面加上/?a1,发现网页出现了变化 3.传入参数,一般情况下是文件包含,或者命令执行&…...
【MySQL进阶】MySQL主从复制
目录 MySQL主从复制 概念 主从形式 一主多从 多主一从 双主复制 主从级联复制 主从复制原理 三个线程 两个日志文件 主从复制的主要工作模式 异步复制 半同步复制 全同步复制 MySQL主从复制 概念 MySQL主从复制是一种数据分布机制,允许从一个数据库服…...
本地部署文生图模型 Flux
本地部署文生图模型 Flux 0. 引言1. 本地部署1-1. 创建虚拟环境1-2. 安装依赖模块1-3. 创建 Web UI1-4. 启动 Web UI1-5. 访问 Web UI 0. 引言 2024年8月1日,blackforestlabs.ai发布了 FLUX.1 模型套件。 FLUX.1 文本到图像模型套件,该套件定义了文本到…...
谷粒商城实战笔记-127-全文检索-ElasticSearch-整合-测试复杂检索
文章目录 一,使用Elasticsearch的Java RESTHighLevel Client完成复杂的查询请求1. 创建检索请求 (SearchRequest)2. 构造检索条件 (SearchSourceBuilder)3. 执行检索 (SearchResponse)4. 处理解析结果5. 获取聚合信息 二,AI时代的效率提升 一,…...
解锁PyCharm:破解依赖库导入之谜
解锁PyCharm:破解依赖库导入之谜 PyCharm作为Python开发者的强大IDE,提供了丰富的功能来简化开发流程。然而,在使用过程中,开发者可能会遇到导入依赖库时出现的错误。本文将深入探讨PyCharm中导入依赖库报错的问题,并…...
JSON-Viewer插件:json格式查看器
npm install vue-json-viewer 2,main.js 引入 import JsonViewer from vue-json-viewer Vue.use(JsonViewer) 3,组件里写入这个组件 <json-viewer:value"textSecond":expand-depth"5"copyableboxedsort></json-viewer…...
HDFS块信息异常,spark无法读取数据
背景:flume数据落盘到hdfs上时,正在写入的文件一般是以.log.tmp结尾的文件,当flume将文件关闭以后将变为:.log 结尾的文件。由于我们使用阿里云的服务器,经常会有个别节点挂掉(进程在,无法通信,…...
TCP协议概述
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它由IETF的RFC 793定义,并在各种通信系统中广泛应用,为不同但互连的计算机通信网络的主计算机中的成对进程之…...
SpringSecurity-3(认证和授权+SpringSecurity入门案例+自定义认证+数据库认证)
SpringSecurity使用数据库数据完成认证 5 SpringSecurity使用数据库数据完成认证5.1 认证流程分析5.1.1 UsernamePasswordAuthenticationFilter5.1.2 AuthenticationManager5.1.3 AbstractUserDetailsAuthenticationProvider5.1.4 AbstractUserDetailsAuthenticationProvider中…...
英国AI大学排名
计算机学科英国Top10 “计算机科学与信息系统”学科除了最受关注的“计算机科学”专业,还包括了“人工智能”“软件工程”“计算机金融”等众多分支专业。 1.帝国理工学院 Imperial College London 单以计算机专业本科来讲,仅Computing这个专业&#x…...
渗透测试与高级攻防技术(二)网络安全技术的前沿探讨:渗透测试与高级攻防
文章目录 引言 第一章:入侵检测与防御系统(IDS/IPS)1.1 IDS与IPS的区别1.2 Cisco IDS/IPS系统 第二章:蜜罐技术2.1 蜜罐技术概述2.2 搭建蜜罐系统2.3 蜜罐技术的优缺点 第三章:社会工程攻击3.1 社会工程攻击概述3.2 社…...
Windows系统下安装mujoco环境的教程【原创】
在学习Mujoco仿真的过程中,我先前是在linux系统下进行的研究与学习,今天来试试看在windows系统中安装mujoco仿真环境。 先前在linux中的一些关于mujoco学习记录的博客:Mujoco仿真【xml文件的学习 3】_mujoco打开xml文件-CSDN博客 下面开始wi…...
【秋招笔试】2024-08-03-科大讯飞秋招笔试题(算法岗)-三语言题解(CPP/Python/Java)
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍖 本次题目难度中等偏上,最后一题又是…...
2024华数杯数学建模竞赛选题建议+初步分析
提示:DS C君认为的难度:C<A<B,开放度:A<B<C。 综合评价来看 A题适合对机械臂和机器人运动学感兴趣的同学,尤其是有一定编程和优化算法基础的同学。不建议非相关专业同学选择。 B题挑战较大࿰…...
大模型的经典面试问题及答案
大语言模型(LLM)在人工智能中变得越来越重要,在各个行业都有应用。随着对大语言模型专业人才需求的增长,本文提供了一套全面的面试问题和答案,涵盖了基本概念、先进技术和实际应用。如果你正在为面试做准备,…...
电子商务网站建设与维护教案/seo技术培训唐山
虽然NI LabVIEW软件长期以来一直帮助工程师和科学家们快速开发功能测量和控制应用,但不是所有的新用户都会遵循LabVIEW编程的最佳方法。LabVIEW图形化编程比较独特,因为只需看一眼用户的应用程序,就马上可以发现用户是否遵循编码的最佳方法。…...
网站服务器环境不支持mysql数据库/关键一招
环境 RedHat Linux 9 VWWare 8.0 SSH 3.2.9 Putty 0.62 MySQL 3.2 问题 通过JDBC连接MySQL,出现“读取 /usr/java/jdk1.6.0_27/jre/lib/ext/mysql-connector-java-3.2.0-alpha-bin.jar时出错cannot read zip file” 解决 换jar包。比如之前使用的mysql-conne…...
游戏网站的设计/百度下载并安装
linux 后台启动java的命令一例 查看已启动的进程实例命令: ps -aux|grep java启动java的进程实例命令: java -jar cloud-auth-1.0.jarjava -cp cloud-eureka-1.0-exec.jar:lib/*:./config/application.yml com.yzh.cloud.eureka.EurekaApplication后…...
本地wordpress 外网访问不了/百度收录网址
前言从智能单品到全屋智能,随着消费者对生活品质追求的提升,智能化产品逐渐走入大众家庭,从而推动智能家居市场蓬勃发展。从 2017 年开始,智能家居设备已经应用于日常生活各项任务。2017 年其市场规模约为 4.3 亿美元。据 IDC 预测…...
常州网站推广/北京网站开发
动态树问题。 维护一个森林,支持树上动态查询、修改、删边、加边、换根等等,但始终保持是一颗树。 我学的主要是路径查询和修改。貌似路径和子树不能兼顾…但有一个很厉害的数据结构叫Top Tree,能同时兼顾,听起来好厉害…...
福州做网站的公/青岛网站推广企业
计算机配置内存12G,显存4G,运行有10分钟左右就提醒说内存不够用然后退出运行,直觉是程序bug问题 终于找到靠谱解决方案: http://cherishlc.iteye.com/blog/2324796 这个博客的第二个给了大致的讲解,在给出的附录中&…...