MySQL修炼手册14:用户权限管理:安全保障与数据隔离
目录
- 写在开头
- 1 用户与权限的关系
- 1.1 用户的创建与删除
- 1.1.1 创建新用户
- 1.1.2 批量创建用户
- 1.1.3 安全删除用户
- 1.2 授予与撤销权限
- 1.2.1 授予权限
- 1.2.2 批量授予权限
- 1.2.3 撤销权限
- 2 角色的应用
- 2.1 创建与管理角色
- 2.1.1 创建角色
- 2.1.2 管理角色
- 2.2 将权限赋予角色
- 2.2.1 将权限赋予角色
- 2.2.2 用户与角色关联
- 2.3 示例演示
- 2.3.1 创建角色和分配权限
- 2.3.2 创建用户并关联角色
- 2.4 角色的优势与最佳实践
- 3 数据库层面的权限控制
- 3.1 数据库级权限管理
- 3.1.1 数据库创建与删除
- 3.1.2 数据库用户权限
- 3.1.3 安全性考虑与最佳实践
- 3.2 数据表级权限管理
- 3.2.1 数据表的创建与删除
- 3.2.2 数据表的权限设置
- 3.2.3 视图与权限
- 写在最后
写在开头
欢迎来到MySQL修炼手册的第14篇,本篇将深入探讨MySQL中用户权限管理的重要性以及如何通过合理的权限控制实现安全保障与数据隔离。在数据库管理中,用户权限的设置至关重要,不仅可以有效保护数据的安全,还能够合理分配数据访问权限,确保数据库的正常运作。让我们一起深入了解用户、权限、角色以及数据库层面的权限控制。
1 用户与权限的关系
在MySQL数据库中,用户与权限的关系是确保数据库安全性和数据隔离的关键。让我们详细展开用户的创建与删除,以及授予与撤销权限这两个重要方面。
1.1 用户的创建与删除
1.1.1 创建新用户
在MySQL中,创建新用户涉及到用户名、主机以及密码的设置。以下是一个详细的创建新用户的例子:
-- 创建新用户 'new_user',允许其从本地主机访问,并设置密码为 'password'
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password';
这一步创建了一个名为 ‘new_user’ 的用户,@‘localhost’ 表示该用户只能从本地主机访问数据库。密码通过 IDENTIFIED BY
设置。密码的选择应考虑到安全性,可以使用强密码策略。
1.1.2 批量创建用户
在某些情况下,需要批量创建用户,可以使用 CREATE USER
语句的多值形式:
-- 批量创建用户,允许从不同主机访问
CREATE USER 'user1'@'localhost' IDENTIFIED BY 'password1','user2'@'%' IDENTIFIED BY 'password2','user3'@'192.168.1.1' IDENTIFIED BY 'password3';
上述例子中,通过逗号分隔,同时创建了三个用户,分别具有不同的访问主机和密码。
1.1.3 安全删除用户
当不再需要某个用户或者存在安全风险时,需要安全地删除用户。删除用户的步骤如下:
-- 删除用户 'user_to_delete',只能从本地主机访问
DROP USER 'user_to_delete'@'localhost';
在删除用户之前,确保该用户已经没有关键数据的访问需求,以免造成数据丢失或不必要的安全隐患。
1.2 授予与撤销权限
1.2.1 授予权限
一旦用户被创建,需要定义其对数据库的操作权限。以下是授予用户权限的一个例子:
-- 授予 'user' 从本地主机对 'database_name.table_name' 进行 SELECT 操作的权限
GRANT SELECT ON database_name.table_name TO 'user'@'localhost';
通过 GRANT
语句,可以精确控制用户对数据库、数据表的不同操作权限,确保用户只能进行其合法的操作。
1.2.2 批量授予权限
在某些情况下,需要批量为用户授予权限,可以使用 GRANT
语句的多值形式:
-- 批量授予 SELECT 和 INSERT 权限给多个用户
GRANT SELECT, INSERT ON database_name.table_name TO 'user1'@'localhost', 'user2'@'%';
上述例子中,同时为两个用户授予了对指定数据库表的不同权限。
1.2.3 撤销权限
在某些情况下,需要撤销用户的某些权限。使用 REVOKE
语句可以完成这一操作:
-- 撤销 'user' 从本地主机对 'database_name.table_name' 进行 SELECT 操作的权限
REVOKE SELECT ON database_name.table_name FROM 'user'@'localhost';
撤销权限是数据库安全管理中的关键操作,确保用户只有合理的权限,提高数据库的整体安全性。
2 角色的应用
在MySQL中,角色是一种灵活而有效的权限管理方式,能够简化用户权限的分配和管理。了解如何创建和使用角色对于数据库管理员来说至关重要。
2.1 创建与管理角色
2.1.1 创建角色
创建角色是一个关键步骤,通过以下SQL语句实现:
CREATE ROLE role_name;
在这里,role_name
是你为角色指定的唯一标识符。创建角色后,你可以为其分配相应的权限。
2.1.2 管理角色
对角色的管理包括修改角色的权限、重命名角色或删除不再需要的角色。
修改角色权限
通过GRANT语句,你可以向角色授予特定的权限。例如,将SELECT权限授予角色:
GRANT SELECT ON database.table TO role_name;
可以指定的权限包括SELECT、INSERT、UPDATE、DELETE等,根据实际需求进行灵活控制。
重命名角色
如果需要修改角色的名称,可以使用RENAME语句:
RENAME ROLE old_name TO new_name;
这样可以保持系统中的角色标识符的一致性。
删除角色
当确定某个角色不再需要时,使用DROP语句删除角色:
DROP ROLE role_name;
这将移除角色及其权限,确保数据库的权限体系清晰有序。
2.2 将权限赋予角色
2.2.1 将权限赋予角色
创建角色后,下一步是将权限赋予这个角色。通过GRANT语句实现:
GRANT permission ON database.table TO role_name;
在这里,permission
可以是SELECT、INSERT、UPDATE等,表示你希望赋予角色的具体操作权限。
2.2.2 用户与角色关联
为了使用户拥有某个角色的权限,需要将用户与角色进行关联。这可以通过GRANT语句完成:
GRANT role_name TO user_name;
这一步确保用户继承了角色的所有权限,实现了权限的集中管理。如果需要撤销角色,可以使用REVOKE语句。
2.3 示例演示
为了更好地理解角色的应用,我们通过一个简单的示例演示整个过程。
假设我们有一个数据库company
,其中包含员工信息的表employees
。我们希望创建一个角色hr_role
,赋予它对employees
表的SELECT和INSERT权限,并将这个角色关联给用户hr_user
。
2.3.1 创建角色和分配权限
首先,创建角色hr_role
:
CREATE ROLE hr_role;
接着,将SELECT和INSERT权限赋予hr_role
:
GRANT SELECT, INSERT ON company.employees TO hr_role;
现在,hr_role
拥有对company.employees
表的读写权限。
2.3.2 创建用户并关联角色
创建用户hr_user
:
CREATE USER 'hr_user'@'localhost' IDENTIFIED BY 'password';
将hr_role
角色赋予用户hr_user
:
GRANT hr_role TO 'hr_user'@'localhost';
现在,hr_user
用户拥有了hr_role
的所有权限,包括对company.employees
表的SELECT和INSERT权限。
2.4 角色的优势与最佳实践
使用角色的优势在于简化权限管理、提高可维护性、减少冗余工作。最佳实践包括:
-
合理划分角色: 根据业务需求和权限粒度,合理划分角色,避免角色权限过于复杂。
-
定期审查和更新: 定期审查角色和权限,确保其与实际需求保持一致,并根据业务变化进行更新。
-
谨慎使用ADMIN权限: 避免滥用ADMIN权限,确保每个角色仅具有其工作需要的最低权限。
3 数据库层面的权限控制
数据库层面的权限控制涉及到对整个数据库以及其中的数据表进行精细化管理,确保数据库系统的安全性和数据隔离。在这一部分,我们将深入探讨数据库层面权限控制的各个方面。
3.1 数据库级权限管理
3.1.1 数据库创建与删除
数据库创建
在MySQL中,通过CREATE DATABASE
语句可以创建新的数据库。然而,为了保证安全性,我们建议在创建数据库时指定一些重要参数,例如字符集、排序规则等。示例:
CREATE DATABASE my_databaseCHARACTER SET utf8mb4COLLATE utf8mb4_unicode_ci;
数据库删除
删除数据库是一项敏感的操作,需要谨慎执行。使用DROP DATABASE
语句可以删除数据库,但要确保在删除之前备份重要数据,并验证执行命令的用户具有足够权限。
DROP DATABASE my_database;
3.1.2 数据库用户权限
用户权限分配
通过GRANT
语句,我们可以为用户分配数据库级别的权限。例如,授予用户对特定数据库的全部权限:
GRANT ALL PRIVILEGES ON my_database.* TO 'username'@'localhost';
用户权限收回
若需要收回用户的某些权限,可以使用REVOKE
语句。例如,收回用户对数据库的写权限:
REVOKE INSERT, UPDATE, DELETE ON my_database.* FROM 'username'@'localhost';
3.1.3 安全性考虑与最佳实践
在设置数据库级权限时,需要考虑一系列安全性问题。以下是一些最佳实践:
- 使用强密码:确保用户密码足够复杂,防范未授权访问。
- 定期审查权限:定期检查用户权限,及时调整以适应系统变化。
- 限制远程访问:只允许必要的IP地址访问数据库,减少潜在风险。
3.2 数据表级权限管理
3.2.1 数据表的创建与删除
数据表创建
使用CREATE TABLE
语句可以创建新的数据表。同时,为了增强安全性,可以定义表的各个字段的数据类型、约束等。
CREATE TABLE my_table (id INT PRIMARY KEY,name VARCHAR(50) NOT NULL
);
数据表删除
删除数据表可使用DROP TABLE
语句,但务必在执行前确认操作无误,以免造成数据丢失。
DROP TABLE my_table;
3.2.2 数据表的权限设置
权限授予
通过GRANT
语句,我们可以为用户分配对数据表的不同权限,例如SELECT、INSERT、UPDATE、DELETE等。
GRANT SELECT, INSERT ON my_database.my_table TO 'username'@'localhost';
权限收回
使用REVOKE
语句可以撤销用户对数据表的某些权限。
REVOKE INSERT ON my_database.my_table FROM 'username'@'localhost';
3.2.3 视图与权限
数据库视图可以看作是虚拟的表,为了更好地控制用户对数据的访问,可以使用视图。创建视图并将权限授予用户,有助于实现更灵活的权限管理。
CREATE VIEW my_view AS SELECT * FROM my_table WHERE condition;GRANT SELECT ON my_database.my_view TO 'username'@'localhost';
写在最后
通过本篇博客,我们深入了解了MySQL中用户权限管理的方方面面。合理的权限管理不仅可以提高数据库的安全性,还能够优化数据库的运行效率。希望本文对你在MySQL数据库管理中的实践有所帮助。下一篇MySQL修炼手册中,我们将继续探讨数据库管理的其他关键主题。敬请期待!
相关文章:

MySQL修炼手册14:用户权限管理:安全保障与数据隔离
目录 写在开头1 用户与权限的关系1.1 用户的创建与删除1.1.1 创建新用户1.1.2 批量创建用户1.1.3 安全删除用户 1.2 授予与撤销权限1.2.1 授予权限1.2.2 批量授予权限1.2.3 撤销权限 2 角色的应用2.1 创建与管理角色2.1.1 创建角色2.1.2 管理角色 2.2 将权限赋予角色2.2.1 将权…...

动态规划解决马尔可夫决策过程
马尔可夫决策过程是强化学习中的基本问题模型之一,而解决马尔可夫决策过程的方法我们统称为强化学习算法。 动态规划( dynamic programming, DP )具体指的是在某些复杂问题中,将问题转化为若干个子问题,并在求解每个子…...

ubuntu1604安装及问题解决
虚拟机安装vmbox7 虚拟机操作: 安装增强功能 sudo mkdir /mnt/share sudo mount -t vboxsf sharefolder /mnt/share第一次使用sudo提示is not in the sudoers file. This incident will be reported 你的root需要设置好密码 sudo passwd root 输入如下指令&#x…...

Leetcode—24. 两两交换链表中的节点【中等】
2023每日刷题(八十七) Leetcode—24. 两两交换链表中的节点 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x),…...

USRP相关报错解决办法
文章目录 前言一、本地环境二、相关报错信息二、解决办法1、更换电脑操作系统2、升级最新版固件 前言 在进行 USRP 开发时遇到了一些报错,这里做个记录解决问题的方法。 一、本地环境 电脑操作系统:Windows11MATLAB 版本:MATLAB 2021aUSRP …...

【剑指offer】重建二叉树
👑专栏内容:力扣刷题⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、题目描述1、题目2、示例 二、题目分析1、递归2、栈 一、题目描述 1、题目 剑指offer:重建二叉树 给定节…...

中仕教育:事业编招考全流程介绍
一、报名阶段 1. 了解查看招聘信息:查看各类事业编岗位的招聘信息,包括岗位职责、招聘条件、报名时间等。 2. 填写报名表:按照要求填写报名表,包括个人信息、教育背景、工作经历等内容。 3. 提交报名材料:将报名表及…...

149. 直线上最多的点数
149. 直线上最多的点数 class MaxPoints:"""149. 直线上最多的点数https://leetcode.cn/problems/max-points-on-a-line/description/?envTypestudy-plan-v2&envIdtop-interview-150"""def solution(self, points: List[List[int]]) ->…...

不合格机器人工程讲师再读《悉达多》-2024-
一次又一次失败的经历,让我对经典书籍的认同感越来越多,越来越觉得原来的自己是多么多么的无知和愚昧。 ----zhangrelay 唯物也好,唯心也罢,我们都要先热爱这个世界,然后才能在其中找到自己所热爱的事业。 ----zh…...

【STM32CubeMX串口通信详解】USART2 -- DMA发送 + DMA空闲中断 接收不定长数据
( 本篇正在编写、更新状态中.....) 文章目录: 前言 前言 本篇,详细地用截图解释 CubeMX 对 USART2 的配置,HAL函数使用,和收发程序的编写。 收、发机制:DMA发送 DAM空闲中断接收。 DMA空…...

Webpack5入门到原理19:React 脚手架搭建
开发模式配置 // webpack.dev.js const path require("path"); const ESLintWebpackPlugin require("eslint-webpack-plugin"); const HtmlWebpackPlugin require("html-webpack-plugin"); const ReactRefreshWebpackPlugin require("…...

苹果眼镜(Vision Pro)的开发者指南(6)-实战应用场景开发 - 游戏、协作、空间音频、WebXR
第一部分:【构建游戏和媒体体验】 了解如何使用visionOS在游戏和媒体体验中创建真正身临其境的时刻。游戏和媒体可以利用全方位的沉浸感来讲述令人难以置信的故事,并以一种新的方式与人们联系。将向你展示可供你入门的visionOS游戏和叙事开发途径。了解如何使用RealityKit有…...

flutter底层架构初探
本文出处:Flutter 中文开发者网站 架构 embedder嵌入层 提供程序入口(其他原生应用也采用此方式),程序由此和底层操作系统协调(surface渲染、辅助功能和输入服务,管理事件循环…...

初识SQL注入
目录 注入攻击 SQL注入 手工注入 Information_schema数据库 自动注入 介绍一下这款工具:sqlmap 半自动注入 前面给大家通过学习练习的方式将XSS攻击的几种形式和一些简单的靶场和例题的演示,从本篇开始我将和小伙伴们通过边复习、边练习的方式来进…...

React初探:从环境搭建到Hooks应用全解析
React初探:从环境搭建到Hooks应用全解析 一、React介绍 1、React是什么 React是由Facebook开发的一款用于构建用户界面的JavaScript库。它主要用于构建单页面应用中的UI组件,通过组件化的方式让开发者能够更轻松地构建可维护且高效的用户界面。 Reac…...

设计模式——1_6 代理(Proxy)
诗有可解不可解,若镜花水月勿泥其迹可也 —— 谢榛 文章目录 定义图纸一个例子:图片搜索器图片加载搜索器直接在Image添加组合他们 各种各样的代理远程代理:镜中月,水中花保护代理:对象也该有隐私引用代理:…...

性能优化(CPU优化技术)-NEON 介绍
「发表于知乎专栏《移动端算法优化》」 本节主要介绍基本 SIMD 及其他的指令流与数据流的处理方式,NEON 的基本原理、指令以及与其他平台及硬件的对比。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:…...

Kafka-服务端-KafkaController
Broker能够处理来自KafkaController的LeaderAndIsrRequest、StopReplicaRequest、UpdateMetadataRequest等请求。 在Kafka集群的多个Broker中,有一个Broker会被选举为Controller Leader,负责管理整个集群中所有的分区和副本的状态。 例如:当某分区的Le…...

ffmpeg使用手册
ffmpeg使用手册 文章目录 ffmpeg使用手册ffmpeg是什么指令总结1.查看ffmpeg版本2.mkv转mp43.裁剪 .mkv 视频4.不调节帧率,尽可能保证原视频质量的情况下将原始视频压缩4.1 crf4.2 preset 5.调节视频帧率6.调节帧率,尽可能保证原视频质量的情况下将原始视…...

操作系统导论-课后作业-ch15
对应异步社区资源HW-Relocation: 1. 种子1运行结果: 种子2运行结果: 种子3运行结果: 2. 需要将界限设置为930,结果如下: 3. 有人说原书翻译有误,原文如下所示: 原文翻译如…...

宝塔面板SRS音视频TRC服务器启动失败
首先,查找原因 1.先看srs服务在哪 find / -type f -name srs 2>/dev/null运行结果: /var/lib/docker/overlay2/5347867cc0ffed43f1ae24eba609637bfa3cc7cf5f8c660976d2286fa6a88d2b/diff/usr/local/srs/objs/srs /var/lib/docker/overlay2/5347867…...

04-Seata修改通信端口
基于docker环境部署下,可以翻看专栏之前的文章 配置文件 /home/server/seata/resources/application.yml 默认${server.port} 1000 1、修改服务端(TC)配置 seata:server:service-port: 7090 2、修改映射端口 在启动脚本中修改映射端口 docker run -id --nam…...

活动回顾丨云原生技术实践营上海站「云原生 AI 大数据」专场(附 PPT)
AI 势不可挡,“智算”赋能未来。2024 年 1 月 5 日,云原生技术实践营「云原生 AI &大数据」专场在上海落幕。活动聚焦容器、可观测、微服务产品技术领域,以云原生 AI 工程化落地为主要方向,希望帮助企业和开发者更快、更高效地…...

【数据结构与算法】4.自主实现单链表的增删查改
📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有限,欢迎各位大佬指点&…...

Linux系统常用命令行指令
Linux系统是一种常用于开源项目开发的生产环境,因其免费、开源、安全、稳定的特点被广泛应用于手机、平板电脑、路由器、电视和电子游戏机等嵌入式系统中,能够更加简便地让用户知道系统是怎样工作的。前几日我安装好了Red Hat Enterprise Linux 9.0&…...

java SSM园林绿化管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计
一、源码特点 java SSM园林绿化管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代 码和数据库,系统主要采…...

【issue-halcon例程学习】edges_color.hdev
例程功能 演示如何使用edges_color,展示只能从彩色图像中提取某些边缘的图像,说明edges_color和edges_image输出之间的差异。 代码如下 dev_update_off () read_image (Image, olympic_stadium) get_image_size (Image, Width, Height) dev_close_wind…...

设计模式—行为型模式之备忘录模式
设计模式—行为型模式之备忘录模式 备忘录(Memento)模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模…...

CMS如何调优
业务JVM频繁Full GC如何排查 原则是先止损,再排查。 FGC的原因是对象晋升失败或者并发模式失败,原因都是老年代放不下晋升的对象了。 1.可能是大对象导致的内存泄漏。快速排查方法:观察数据库网络IO是否和FGC时间点吻合,找到对应…...

在PyCharm中安装GitHub Copilot插件,login之后报出如下错误:
Sign in failed. Reason: Request signInInitiate failed with message: connect ECONNABORTED 20.205.243.166:443, request id: 7, error code: -32603 前提: 设置网址:https://github.com/settings/copilot,已设置为允许 或者࿱…...