跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
SQL

MySQL 视图、用户与权限管理详解

综述由AI生成MySQL 视图是由 SELECT 语句定义的虚拟表,用于封装复杂查询并简化操作。支持隐藏敏感数据以增强安全性,但部分视图(如含聚合函数)不可更新。演示了视图的创建、修改数据限制及删除语法。此外,涵盖 MySQL 用户管理的完整流程,包括查看、创建、密码修改与删除。重点讲解了权限系统,通过 GRANT 和 REVOKE 命令实现用户对数据库、表或列的细粒度访问控制,强调使用 root 管理员进行权限分配的安全性。

Elasticer发布于 2026/3/24更新于 2026/5/1214 浏览
MySQL 视图、用户与权限管理详解

一。视图

在复杂的联合查询场景中,当需要多次使用同一个语句时,引入视图可以对复杂的 SQL 语句进行封装,从而简化操作。

1.1 什么是视图

视图是由 SELECT 语句定义的虚拟表,其结构和数据来源于底层的基表。视图中存储的是查询语句,当用户访问视图时,数据库会执行该查询语句,从基表中提取数据并返回结果。用户可以像操作普通表一样使用视图进行查询、更新和管理。

例如,一个涉及多张表的联合查询语句可以使用视图进行封装,对 SQL 语句进行简化。

1.2 创建视图

创建视图语法:

CREATE VIEW view_name [(column_list)] AS select_statement;

测试数据:查询 MySQL 成绩比 Java 成绩好的同学。

SELECT DISTINCT s.id, s.name, s1.sco AS java_sco, s2.sco AS mysql_sco
FROM student s, score s1, score s2, course c1, course c2
WHERE s.id = s1.student_id AND s.id = s2.student_id
AND s1.course_id = c1.id AND s2.course_id = c2.id
AND c1.name = 'Java' AND c2.name = 'MySQL' AND s1.sco < s2.sco;

使用视图进行包装:

CREATE VIEW v_Java_or_MySQL AS
SELECT DISTINCT s.id, s.name, s1.sco AS java_sco, s2.sco AS mysql_sco
FROM student s, score s1, score s2, course c1, course c2
WHERE s.id = s1.student_id AND s.id = s2.student_id
AND s1.course_id = c1.id AND s2.course_id = c2.id
AND c1.name = 'Java' AND c2.name = 'MySQL' AND s1.sco < s2.sco;

SELECT * FROM v_Java_or_MySQL;

查询学生的姓名和总分(隐藏学号和各科成绩):

-- 直接使用真实表查询
SELECT s.name, SUM(sc.sco)
FROM student s, score sc
WHERE s.id = sc.student_id GROUP BY s.name;

-- 使用视图
CREATE VIEW v_total AS
SELECT s.name, SUM(sc.sco)
FROM student s, score sc
WHERE s.id = sc.student_id GROUP BY s.name;

SELECT name FROM v_total;

若直接使用真实表查询,可以随意查看所需信息,但在银行系统等场景中,这无法保证信息的安全性。视图可以与真实表进行连接查询。

1.3 修改数据

对真实表数据的修改会影响视图,因为视图本质保存的是查询语句。通过视图修改数据也会影响到基表,但并非所有视图都可以修改。

以下条件的视图不可以修改:

  • 创建视图时使用聚合函数
  • 创建视图时使用 DISTINCT
  • 创建视图使用 GROUP BY 以及 HAVING 子句
  • 创建视图使用 UNION 或者 UNION ALL
  • 查询列表使用子查询
  • 在 FROM 子句中引用不可更新的视图

因此,大部分情况下建议直接修改真实表。

1.4 删除视图

删除视图语法:

DROP VIEW view_name;

查看创建的视图:

SHOW TABLES;

删除视图:

DROP VIEW v_java_or_mysql, v_java_sco, v_total;

1.5 视图的优点

  • 简单性:将复杂的 SQL 语句封装为简单的查询语句。
  • 安全性:隐藏表中的敏感数据。
  • 逻辑数据独立性:底层表结构变化时,只需修改视图定义,无需修改依赖视图的应用程序。
  • 重命名列:允许用户重命名列,增强数据可读性。

二。用户

数据库服务安装完成后默认存在 root 用户(超级管理员),拥有最高权限。通常需为当前应用添加特定用户并指定权限。

2.1 查看用户

用户信息保存在系统数据库 mysql 的 user 表中。

USE mysql;
SELECT host, user, authentication_string FROM user;
  • host:表示谁可以登录。
  • user:表示用户名。
  • authentication_string:表示加密后的用户密码。

2.2 创建用户

创建用户语法:

CREATE USER 'user_name'@'host_name' IDENTIFIED BY 'auth_string';
  • 'user_name'@'host_name':用户描述方式。
  • 'user_name':登录用户名。
  • 'host_name':可登录的主机名或 IP。不指定相当于 '%'(所有主机),可能存在安全隐患。
  • 'auth_string':密码明文。

示例:创建只允许本机登录的用户。

CREATE USER 'sunny'@'localhost' IDENTIFIED BY '8888';

示例:创建允许从特定网段登录的用户。

CREATE USER 'rain'@'192.168.10.1/24' IDENTIFIED BY '666';

2.3 修改密码

修改密码语法:

ALTER USER 'user_name'@'host_name' IDENTIFIED BY 'auth_string';
SET PASSWORD FOR 'user_name'@'host_name' = 'auth_string';
SET PASSWORD = 'auth_string'; -- 为当前用户设置

示例:

ALTER USER 'sunny'@'localhost' IDENTIFIED BY '6';

2.4 删除用户

删除用户语法:

DROP USER 'user_name'@'host_name';

示例:

DROP USER 'rain'@'192.168.10.1/24';

三。权限

用户创建后,需赋予专属权限。

3.1 查看当前用户权限

查看语法:

SHOW GRANTS FOR 'user_name'@'host_name';

示例:

SHOW GRANTS FOR 'sunny'@'localhost';

3.2 添加权限

添加权限语法:

GRANT priv_type ON priv_level TO 'user_name'@'host_name';
  • priv_type:权限类型。
  • priv_level:权限级别(*.* 表示所有数据库下的所有表)。

示例:授予查看 test 数据库的权限。

GRANT SELECT ON test.* TO 'sunny'@'localhost';

示例:授予 test 数据库所有权限。

GRANT ALL ON test.* TO 'sunny'@'localhost';

3.3 回收权限

回收权限语法:

REVOKE priv_type ON priv_level FROM 'user_name'@'host_name';

示例:

REVOKE ALL ON *.* FROM 'sunny'@'localhost';

注意事项: 赋予和收回权限时需注意当前用户是否有相应能力,建议使用 root 超级管理员进行操作。

目录

  1. 一。视图
  2. 1.1 什么是视图
  3. 1.2 创建视图
  4. 1.3 修改数据
  5. 1.4 删除视图
  6. 1.5 视图的优点
  7. 二。用户
  8. 2.1 查看用户
  9. 2.2 创建用户
  10. 2.3 修改密码
  11. 2.4 删除用户
  12. 三。权限
  13. 3.1 查看当前用户权限
  14. 3.2 添加权限
  15. 3.3 回收权限
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 腾讯大模型「实用」路线揭示企业 AI 应用新方向
  • Ubuntu 18.04 在 VMware 中的安装教程
  • Java 参数验证:@Valid 和 @Validated 的区别与最佳实践
  • 从三年前端到 CS 硕士:韩国留学经历复盘与职业回归
  • 从三年前端到 CS 硕士:在韩国留学的转型与复盘
  • 从三年前端到 CS 硕士:韩国留学复盘与前端回归之路
  • 从三年前端到 CS 硕士:我在韩国亚大读研的得失与回归
  • C 语言数据结构:栈和队列详解
  • Python AI 大模型部署指南:本地运行、API 服务及 Docker 封装
  • Python 版本管理实战指南:pyenv 安装与配置详解
  • OpenClaw 深度调教指南:5 步让 AI 助手真正能干活
  • 钉钉单聊机器人 Stream 模式实现
  • 51 单片机万年历构建:硬件选型与农历算法解析
  • Spring Cloud 分布式智能推荐系统实战
  • MySQL 9.6 Windows 详细安装与坑点修复
  • LIBWEBKIT2GTK-4.1-0 实战:构建轻量级浏览器
  • Whisper-Large-V3-Turbo 快速部署与性能解析
  • 前端 AJAX 详解与动态页面爬虫实战思路
  • Windows 11 配置 CUDA 版 llama.cpp 实现 GGUF 模型本地聊天
  • AI 绘画 4 步极速生成技术原理与实战部署

相关免费在线工具

  • SQL 美化和格式化

    在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online

  • SQL转CSV/JSON/XML

    解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online

  • CSV 工具包

    CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online