首页 游戏 软件 资讯 排行榜 专题
首页
数据库
MySQL视图与用户权限管理从入门到精通

MySQL视图与用户权限管理从入门到精通

热心网友
85
转载
2026-04-24

1. 视图

1.1 视图的基本概念

想象一下,你面前有一张表格,但它并不真正存在于数据库的物理存储中,而是由查询语句动态生成的。这就是视图。你可以把它理解为一个“虚拟表”,它的数据来源于一个或多个基础表(或其他视图)的查询结果。用户可以对视图进行查询、更新等操作,就像操作一张普通的表一样。关键在于,视图本身不存储数据,它只是一个逻辑上的表示,其物理数据完全依赖于背后的基础表。

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

1.2 视图的基本操作

1.2.1 创建视图

create view 列名1,列名2,列名3 as select 查询语句...

这里,view 是创建视图的关键字。

1.2.2 使用视图

视图到底有什么用?来看一个典型的场景:保护敏感数据。

假设我们只想查询学生的姓名和总分,而不希望暴露其学号和单科成绩。如果直接查询真实表,虽然可以做到,但存在风险——任何有查询权限的人,都可以随时在SELECT语句里加上那些敏感字段。

# 使⽤真实表进⾏查询
select s.name, sum(sc.score) total from student s, score sc where s.id = sc.student_id
group by sc.student_id order by s.id;
-- 缺点:可以随时在select关键字后加上学号和各科成绩字段,会暴露学生信息,不安全

这时,视图的价值就体现出来了。我们可以创建一个“安全窗口”。

# 创建视图
create view v_student_total_points as
select s.id, s.name, sum(sc.score) total from student s, score sc where s.id = sc.student_id group by s.id order by s.id;

-- 使用视图进行查询
select * from v_student_total_points;
+-----------+-------+
| name      | total |
+-----------+-------+
| 唐三藏    |   469 |
| 孙悟空    | 179.5 |
| 猪悟能    |   200 |
| 沙悟净    |   218 |
| 宋江      |   118 |
| 武松      |   178 |
| 李逹      |   172 |
+-----------+-------+
-- 只能查询出姓名和总分,进一步保护了学生的个人信息

视图的另一个妙用是简化复杂查询。既然视图本质上是一张虚拟表,那么它自然可以参与表连接。

select * from v_student_total_points v, student s where v.id = s.id;
-- 视图本质上是一张虚拟的表,所以可以用视图与真实表进行表连接查询

1.2.3 修改数据

视图与基础表的数据是联动的,这一点需要特别注意。

  • 通过真实表修改数据,会影响视图
# 修改唐三藏的JA VA成绩为99分
update score set score = 99 where student_id = 1 and course_id = 1;
# 查询视图,发现唐三藏这条记录已被修改
select * from v_student_socre;
  • 通过视图修改数据会影响基表
# 更新视图
update v_student_socre_v1 set score = 99 where score_id = 3;
# 查看真实表数据,发现已被修改
select * from score where student_id = 1 and course_id = 5;

核心注意事项:

1. 修改真实表会影响视图,修改视图同样也会影响真实表,它们是双向联通的。

2. 但并非所有视图都可以更新。以下几种情况创建的视图是“只读”的,无法通过它来修改底层数据:

-------创建视图时使用聚合函数的视图

-------创建视图时使用 DISTINCT

-------创建视图时使用 GROUP BY 以及 HA VING子句

-------创建视图时使用 UNION 或 UNION ALL

-------查询列表中使用子查询

-------在FROM子句中引用不可更新视图

1.2.4 删除视图

# 语法
drop view 视图名;

1.3 视图的优点

  1. 简单性:视图可以将复杂的多表连接、嵌套查询封装成一个简单的查询接口。用户无需理解底层复杂逻辑,直接查询视图即可。
  2. 安全性:这是视图最核心的用途之一。通过创建不包含敏感字段(如密码、薪资)的视图,可以精确控制用户能看到的数据范围,实现数据层面的访问控制。
  3. 逻辑数据独立性:当底层表结构因业务调整发生变化时,只要视图的查询结果保持不变,依赖该视图的应用程序就无需修改。这实现了应用与数据库的解耦。
  4. 重命名列:视图允许为查询结果中的列起一个更直观、更符合业务场景的别名,从而增强数据的可读性。

2. 用户与权限管理

数据库安装后,默认的root用户拥有至高无上的权力,可以管理所有数据库。但在实际生产环境中,这显然不是最佳实践。更合理的做法是:为每个应用或业务模块创建独立的数据库,并分配一个专属用户,该用户只能操作自己名下的数据库,无法越界访问其他数据。这就是用户与权限管理要解决的问题。

MySQL视图与用户权限管理从入门到精通

如上图所示,一个清晰的权限架构应该是这样的:

root 可以访问和操纵所有的数据库:DB1, DB2, DB3, DB4

普通用户1 只能访问和操纵数据库DB1

普通用户2 只能访问和操纵数据库DB3

只读用户1 只能访问数据库DB3

只读用户2 只能访问数据库DB4

2.1 用户

2.1.1 查看用户

所有用户信息都存储在mysql数据库的user表中。要查看用户,可以这样做:

-- 选择数据库
use mysql;
-- 查看表结构
desc user;
-- 查看用户表
select * from user;

MySQL视图与用户权限管理从入门到精通

MySQL视图与用户权限管理从入门到精通

这张表的关键字段含义如下:

host: 允许登录的主机IP或域名,相当于白名单。localhost表示只能从数据库服务器本机登录。

user: 用户名。

*_priv: 用户拥有的具体权限,Y表示有,N表示无。

authentication_string: 加密后的用户密码。

2.1.2 创建用户

create user if  not exists 'user_name'@'host_name' identified by 'auth_string';
  • user_name: 用户名,用单引号包裹,区分大小写。
  • host_name: 允许登录的主机或IP段,同样用单引号包裹。
  • auth_string: 用户的明文密码(注意:某些数据库的密码策略可能禁止使用过于简单的密码)。

例如,创建一个用户名为zhuxulong,密码为123456,且只允许从IP172.20.109.85登录的账户:

create user if  not exists 'zhuxulong'@'172.20.109.85' identified by '123456';

MySQL视图与用户权限管理从入门到精通

创建用户时的几个关键细节:

  • 如果不指定host_name,则默认为'%',意味着允许从任何主机连接。这存在严重的安全风险,强烈不建议在生产环境中这样设置。
  • user_namehost_name必须分别用单引号包裹。如果写成'user_name@host_name',数据库会将其整体视为一个用户名,主机部分则变成'%'
  • host_name支持使用子网掩码格式来指定一个IP范围,这在大规模部署中非常有用:

    A: 198.0.0.0 : A段网络中的任意一台主机

    B: 198.51.0.0 B段网络中的任意一台主机’

    C: 198.51.100.0 C段网络中的任意一台主机

    D: 198.51.100.1 :只包含特定IP地址的主机

2.1.3 修改密码

# 为指定⽤⼾设置密码 【推荐】
ALTER USER 'user_name'@'host_name' IDENTIFIED BY 'auth_string';

# 为指定⽤⼾设置密码
SET PASSWORD FOR 'user_name'@'host_name' = 'auth_string';

# 为当前登录⽤⼾设置密码
SET PASSWORD = 'auth_string';

2.1.4 删除用户

DROP USER [IF EXISTS] 'user_name'@'host_name'[, ...];

2.2 权限与授权

创建用户只是第一步,新用户默认是“光杆司令”,没有任何操作权限。我们需要手动为其授权。MySQL内置了非常丰富的权限,下图是一个常见的权限列表:

MySQL视图与用户权限管理从入门到精通

2.2.1 给用户授权

授权的基本语法如下:

grant 权限名 on priv_level to 'user_name'@'host_name' [WITH GRANT OPTION]
  • 权限名:参考上图中的Privilege列,如SELECT, INSERT, ALL PRIVILEGES等。
  • priv_level: 指定权限的作用范围。常见格式有:
    • *.*: 所有数据库的所有表(相当于root的部分权限)。
    • db_name.*: 指定数据库下的所有表。
    • db_name.tbl_name: 指定数据库的指定表。
  • 'user_name'@'host_name': 指定被授权的用户。
  • [WITH GRANT OPTION]: 可选。如果加上,表示允许该用户将自己获得的权限再授予其他用户。

示例:为我们刚才创建的zhuxulong用户授予test数据库中student表的查询(SELECT)权限。

grant select on  test.student to 'zhuxulong'@'172.20.109.85';

2.2.2 回收用户授权

权限给出去,也能收回来。回收权限使用REVOKE语句。

revoke 权限名  on 数据库名.表名 from 'user_name'@'host_name';

总结

视图和用户权限管理是数据库安全与数据管理的两大基石。视图通过逻辑封装提供了数据安全、简化访问和结构独立的优雅方案;而精细化的用户与权限管理,则是践行“最小权限原则”、保障数据库安全运行的必备手段。将两者结合使用,能构建起既灵活又安全的数据访问体系。

来源:https://www.jb51.net/database/3627753fo.htm
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

MySQL视图与用户权限管理从入门到精通
数据库
MySQL视图与用户权限管理从入门到精通

1 视图 1 1 视图的基本概念 想象一下,你面前有一张表格,但它并不真正存在于数据库的物理存储中,而是由查询语句动态生成的。这就是视图。你可以把它理解为一个“虚拟表”,它的数据来源于一个或多个基础表(或其他视图)的查询结果。用户可以对视图进行查询、更新等操作,就像操作一张普通的表一样。关键在于,

热心网友
04.24
mysql并发更新同一行数据怎么办_利用乐观锁或分段更新优化
数据库
mysql并发更新同一行数据怎么办_利用乐观锁或分段更新优化

MySQL并发更新同一行数据怎么办?利用乐观锁或分段更新优化 先说结论:最稳妥的方案,是优先采用带条件的 UPDATE 配合 ROW_COUNT() 检查,并结合 version 字段实现乐观锁。至于分段更新,它只在批量修正这类少数场景中作为兜底手段,绝不能替代核心的并发控制逻辑。 为什么不能指望

热心网友
04.23
MySQL数据库异构迁移面临的挑战_转换数据类型与存储引擎
数据库
MySQL数据库异构迁移面临的挑战_转换数据类型与存储引擎

MySQL异构迁移:四大核心挑战与实战应对指南 直接说结论:一次成功的MySQL异构迁移,远不止是数据搬运。它更像是一次精密的“器官移植”,需要针对不同“组织”的特性进行预处理。整个过程可以归纳为四类核心问题的系统化处理:时间类型必须按UTC显式转换并规避自动更新陷阱;存储引擎切换应禁用简单的ALT

热心网友
04.23
mysql如何处理mysql服务无法启动_查看error日志排查原因
数据库
mysql如何处理mysql服务无法启动_查看error日志排查原因

MySQL服务启动失败?别慌,先看懂error log在说什么 遇到MySQL服务启动失败,很多人的第一反应是重装或者四处搜索错误代码。其实,最直接、最准确的“故障诊断书”就在眼前——那就是MySQL的error log。问题在于,很多人要么找不到它,要么面对满屏的日志信息不知从何看起。今天,我们就

热心网友
04.23
mysql数据意外丢失该怎么找回_InnoDB事务日志RedoLog灾备原理
数据库
mysql数据意外丢失该怎么找回_InnoDB事务日志RedoLog灾备原理

MySQL数据意外丢失该怎么找回:InnoDB事务日志RedoLog灾备原理 开门见山,先说一个核心结论:当数据库遭遇误删,很多人第一时间想到的REDO LOG,其实**并不能直接帮你“找回”数据**。无论是手滑执行了DROP DATABASE,还是跑错了DELETE FROM语句,指望REDO L

热心网友
04.23

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

ArDrive
AI
ArDrive

ArDrive是什么 简单来说,ArDrive是一个承诺“一旦存入,永远留存”的文件存储服务。它由ArDrive公司打造,目标很明确:提供比传统网盘或硬盘更让人安心的数据安全级别。这背后的奥秘,在于它构建于Arwea ve之上——一个去中心化的区块链网络。这个网络的工作机制很巧妙:它会将你的数据复制

热心网友
04.24
HealthAI 为企业提供智能化、个性化的健康管理解决方案,助力降低成本、提升效率
AI
HealthAI 为企业提供智能化、个性化的健康管理解决方案,助力降低成本、提升效率

HealthAI产品介绍 在当今的企业运营中,员工的健康管理正从一个后勤议题,转变为核心的成本与效率命题。HealthAI健康云开放平台的诞生,恰恰是回应了这一关键需求。它是一款综合性的企业健康管理解决方案,其底层逻辑是通过先进的算法与数据洞察,帮助企业系统化、智能化地管理员工或客户的健康信息,让健

热心网友
04.24
熊市生存法则:加密投资者必须避免的8个致命错误
web3.0
熊市生存法则:加密投资者必须避免的8个致命错误

加密货币交易平台推荐: 欧易OKX: Binance币安: 火币Huobi: Gateio芝麻开门: 市场回暖的信号已经相当明确,2025年的空投季自然备受瞩目。这远不止是获取早期代币那么简单,它更像是一张深度参与Web3生态建设的入场券。想要捕获超额收益?秘诀无他,唯有提前布局与精准交互。 模块化

热心网友
04.24
全球量产充电速度最快电车!领克10&10+正式开启预售:20.99万起
业界动态
全球量产充电速度最快电车!领克10&10+正式开启预售:20.99万起

全球量产充电速度最快电车!领克10&10+正式开启预售:20 99万起 4月24日,领克汽车正式官宣,旗下全新中大型纯电运动轿车——领克10及其高性能版领克10+,启动全国预售。市场关注已久的售价悬念终于揭晓,预售价从20 99万元起。 具体来看,新车提供了多个配置版本以满足不同需求:701公里长续

热心网友
04.24
喜报:比特币(BTC)进入“第三波”上涨阶段,目标价看向20万美元,卖压正逐渐消退
web3.0
喜报:比特币(BTC)进入“第三波”上涨阶段,目标价看向20万美元,卖压正逐渐消退

Binance币安 欧易OKX ️ Huobi火币️ 市场情绪正在悄然转变。一种越来越强的共识是,比特币或许正站在新一轮大规模上涨周期的起点,如果历史规律再度上演,其价格目标将指向令人瞩目的20万至24万美元区间。 核心要点: 新一轮的“第三浪”上涨或推动比特币价格进入200,000至240,000

热心网友
04.24