MySQL--DCL全解全知

server/2025/3/1 10:43:20/

MySQL 权限管理详解(面试重点)


一、权限管理核心语法
1. GRANT​ 授予权限
GRANT 权限1, 权限2, ... 
ON 权限级别 
TO '用户名'@'主机' [IDENTIFIED BY '密码']
[WITH GRANT OPTION | 其他资源限制];
  • 权限列表:

    SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, 
    INDEX, REFERENCES, EXECUTE, SHOW VIEW, GRANT OPTION, ...
    
  • 权限级别:
    级别语法示例说明
    全局权限​*.*​所有数据库的所有表
    数据库级权限数据库名.*​指定数据库的所有表
    表级权限数据库名.表名​指定数据库的指定表
    列级权限​列名​需在权限后指定列(如 SELECT(col1)​)
    存储过程权限​PROCEDURE 过程名​指定存储过程的执行权限
  • 关键选项:

    • ​WITH GRANT OPTION​:允许用户将自身权限授予他人(谨慎使用)。
    • ​MAX_QUERIES_PER_HOUR 10​:限制用户每小时最大查询数(资源控制)。

示例:

-- 授予用户对test数据库所有表的SELECT和INSERT权限,并允许其授权他人
GRANT SELECT, INSERT ON test.* TO 'user1'@'%' 
IDENTIFIED BY 'password' WITH GRANT OPTION;-- 授予全局权限(仅允许DBA使用)
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;

2. REVOKE​ 撤销权限
REVOKE 权限1, 权限2, ... 
ON 权限级别 
FROM '用户名'@'主机';
  • 注意:撤销权限需与授予时的权限级别完全匹配。
  • 级联撤销:若用户通过WITH GRANT OPTION​授予他人权限,撤销时需手动处理。

示例:

-- 撤销用户对test数据库的INSERT权限
REVOKE INSERT ON test.* FROM 'user1'@'%';-- 撤销所有权限(不会删除用户)
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user1'@'%';

二、账户管理
1. 创建账户
CREATE USER '用户名'@'主机' IDENTIFIED BY '密码';
-- 示例:
CREATE USER 'user2'@'192.168.1.%' IDENTIFIED BY 'Pass123!';
  • 主机限制:

    • ​%​:允许任意主机访问。
    • ​localhost​:仅允许本地访问。
    • ​192.168.1.%​:允许指定IP段访问。
2. 修改账户
-- 修改用户名(需直接操作mysql.user表)
UPDATE mysql.user SET user='new_user' WHERE user='old_user';
FLUSH PRIVILEGES; -- 必须刷新权限-- 修改密码(推荐方式)
ALTER USER '用户'@'主机' IDENTIFIED BY '新密码';
3. 删除账户
DROP USER '用户名'@'主机';
-- 示例:
DROP USER 'user1'@'%';

三、查看权限
1. 查看用户权限
SHOW GRANTS FOR '用户'@'主机';
-- 示例:
SHOW GRANTS FOR 'user1'@'%';
2. 查询系统权限表
USE mysql;
-- 查看所有用户
SELECT user, host FROM user;-- 查看全局权限
SELECT * FROM user WHERE user='user1' AND host='%';-- 查看数据库级权限
SELECT * FROM db WHERE user='user1';-- 查看表级权限
SELECT * FROM tables_priv WHERE user='user1';

四、面试高频问题
1. WITH GRANT OPTION​ 的作用与风险
  • 作用:允许用户将其权限授予其他用户。

  • 风险:若恶意用户获得此权限,可能导致权限扩散。

  • 案例:

    -- user1将权限授予user2后,若撤销user1权限,user2权限仍保留!
    GRANT SELECT ON test.* TO 'user1'@'%' WITH GRANT OPTION;
    
2. 权限生效时机
  • 立即生效:使用 FLUSH PRIVILEGES;​ 或重启MySQL服务。
  • 自动生效:通过 GRANT/REVOKE​ 语句操作权限时自动生效。
3. 列级权限如何实现?
-- 授予user1对test.orders表的amount列的SELECT权限
GRANT SELECT (amount) ON test.orders TO 'user1'@'%';
4. 如何限制用户资源?
-- 限制用户每小时最多10次查询
GRANT USAGE ON *.* TO 'user1'@'%' 
WITH MAX_QUERIES_PER_HOUR 10;

五、最佳实践
  1. 最小权限原则:仅授予用户必要的最低权限。
  2. 避免通配符主机名:尽量限制IP范围(如 192.168.1.%​)。
  3. 定期审查权限:清理未使用的账户和过期权限。
  4. 使用角色管理(MySQL 8.0+):通过角色批量管理权限。

http://www.ppmy.cn/server/171526.html

相关文章

鹏信科技入选2024年网络安全技术应用典型案例项目名单

近日,工业和信息化部等十三部门办公厅(办公室、秘书局、综合司)联合发布了《2024年网络安全技术应用典型案例项目名单》,鹏信科技安全综合能力管理平台荣幸入选。此次入选,不仅是对鹏信科技创新实力和技术水平的充分肯…

Android+SpringBoot的老年人健康饮食小程序平台

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望帮助更多的人。 系统介绍 我将从经济、生活节奏、技术融合等方面入手,详细阐述居家养老管理模式兴起的…

qt之Vertical Layout

在 Qt 中使用垂直布局(QVBoxLayout)的完整指南如下: 1. 垂直布局(QVBoxLayout)的作用 用于将控件按**垂直方向(从上到下)**依次排列,自动管理控件的位置和大小,适配不同…

Postman接口测试工具使用

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、前言 在前后端分离开发时,后端工作人员完成系统接口开发后,需要与前端人员对接,测试调试接口,验证接口的正确…

【精华】为什么class在前端开发中不常用?

为什么class在前端开发中不常用? js是一种基于原型的语言。它的对象继承是通过 原型链(prototype chain)实现的,每个对象都有一个 proto 属性指向它的原型。(大多数传统面向对象语言(如 Java、C、Python、…

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_conf_t

ngx_conf_t 定义在src/core/ngx_core.h typedef struct ngx_conf_s ngx_conf_t;ngx_conf_s 定义在 src/core/ngx_conf_file.h struct ngx_conf_s {char *name;ngx_array_t *args;ngx_cycle_t *cycle;ngx_pool_t *po…

Linux-基本指令1

一.ls 语法:ls [选项] [⽬录或⽂件] 功能:对于⽬录,该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件,将列出⽂件名以及其他信 息。 常用选项: 二.pwd 语法: pwd 功能:显⽰⽤⼾当前所在的⽬录 三.cd L…

面试八股文--数据库基础知识总结(2) MySQL

本文介绍关于MySQL的相关面试知识 一、关系型数据库 1、定义 关系型数据库(Relational Database)是一种基于关系模型的数据库管理系统(DBMS),它将数据存储在表格(表)中,并通过表格…