Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL的视图和用户权限管理

MySQL入门实战:视图+用户权限管理使用方法(图文+代码)

作者:草莓熊Lotso

本文详细介绍了MySQL的视图和用户权限管理,视图是虚拟表,不存储数据,数据来源于基表,视图和基表数据双向联动,用户管理与权限控制方面,最小权限原则、登录限制、禁止root远程登录和按业务分用户是生产环境的最佳实践,正确总结了视图和用户管理的核心知识点

在日常开发和面试中,视图用户权限管理是 MySQL 最基础也最容易被忽视的两个核心模块:很多新手只会用基础的增删改查,生产环境直接用 root 账号操作所有库,视图乱用导致业务 bug 和性能问题,最终引发数据安全风险。本文从核心定义、基础语法、实战案例到使用限制,全流程拆解,面试、开发、运维一套搞定。

一. MySQL 视图(View)全解

1.1 视图的核心本质

视图是一张虚拟表,其内容由 select 查询语句定义。和真实的业务表一样,视图包含带名称的列和行数据,但它本身不存储任何真实数据,数据全部来自视图定义时依赖的底层基表。

视图和基表的数据是强关联的:

它的核心价值在于:

1.2 视图的基础使用

我们以经典的员工表emp、部门表dept为案例,完整演示视图的创建、查询、修改、删除全流程,和参考文档案例完全对齐。

1.2.1 创建视图

基础语法

create view 视图名 as select查询语句;

实战案例:创建员工姓名 + 部门名称的关联视图,屏蔽员工薪资、编号等敏感字段

-- 创建视图v_ename_dname,关联员工表和部门表
create view v_ename_dname as
select ename, dname
from emp, dept
where emp.deptno = dept.deptno;

1.2.2 查询视图

视图的查询语法和普通表完全一致,支持排序、筛选、聚合等所有 select 操作

-- 基础查询
select * from v_ename_dname;

-- 带排序的查询
select * from v_ename_dname order by dname;

1.2.3 视图与基表的双向数据联动

这是视图最核心的特性,参考文档中重点强调了视图和基表的互相影响,我们通过案例完整演示。
① 修改视图,影响基表

-- 修改视图中的员工姓名
update v_ename_dname set ename='test' where ename='clark';

-- 查询基表,数据已被同步修改
select * from emp where ename='clark';
select * from emp where ename='test';

② 修改基表,影响视图

-- 修改基表中员工的部门编号
update emp set deptno=10 where ename='james';

-- 查询视图,部门名称已同步更新
select * from v_ename_dname where ename='james';

1.2.4 删除视图

drop view 视图名;

-- 示例:删除刚才创建的视图
drop view v_ename_dname;

1.3 视图的使用规则与限制

二. MySQL 用户管理与权限控制

2.1 为什么必须做用户管理?

核心痛点:生产环境直接使用 root 用户存在极大的安全隐患。

正确的做法是:按业务、按人员创建独立用户,只分配最小必要权限。 比如张三只能操作 mytest 库,李四只能操作 msg 库,互不影响,风险可控。

2.2 MySQL 用户的核心存储(查询系统用户以及核心字段解释)

MySQL 中的所有用户信息,都存储在系统数据库mysqluser表中,这是用户管理的核心。

查询系统用户

-- 切换到mysql系统库
use mysql;

-- 查询核心用户信息
select host, user, authentication_string from user;

核心字段解释

字段核心含义
host允许该用户登录的主机地址:localhost表示仅本机登录,%表示允许任意地址远程登录,也可以指定固定 IP
user用户名
authentication_string经过 password 函数加密后的用户密码,明文密码无法直接存储
xxx_priv一系列权限字段,记录该用户拥有的全局权限

2.3 用户的核心操作(创建、删除、修改密码)

2.3.1 创建用户

基础语法

create user '用户名'@'登陆主机/ip' identified by '密码';

实战案例:创建仅能本机登录的用户 Lotso,密码为 12345678

create user 'Lotso'@'localhost' identified by '12345678';

创建完成后,再次查询 user 表,就能看到新增的用户信息。

✅️避坑提示:如果创建时出现ERROR 1819 (HY000): Your password does not satisfy the current policy requirements报错,是因为 MySQL 开启了密码强度校验。

✅️ 解决方案:通过show variables like 'validate_password%';查看密码策略要求,设置符合复杂度的密码,或临时调整密码策略。

2.3.2 删除用户

基础语法

drop user '用户名'@'主机名';

错误示范

-- 直接写用户名会报错,默认匹配%主机,和创建的localhost用户不匹配
drop user Lotso;

正确示范

-- 必须和创建时的用户名+主机名完全匹配
drop user 'Lotso'@'localhost';

2.3.3 修改用户密码

① 用户自己修改自己的密码

set password=password('新的密码');

② root 用户修改指定用户的密码(生产环境常用)

set password for '用户名'@'主机名'=password('新的密码');

实战案例:修改 Lotso 用户的密码为 87654321

set password for 'Lotso'@'localhost'=password('87654321');

2.4 MySQL 权限体系

权限列表我们按使用场景分类整理,方便大家按需分配:

权限分类核心权限适用范围
基础 DML 权限select、insert、update、delete
结构操作权限create、drop、alter、index数据库 / 表
视图专属权限create view、show view视图
存储过程权限create routine、alter routine、execute存储过程 / 函数
管理类权限create user、super、process、reload、shutdown服务器全局
全权限all [privileges]对应范围的所有权限

权限粒度说明

2.5 权限的核心操作(授权、回收、查看)

2.5.1 给用户授权

刚创建的用户默认没有任何权限,只能登录 MySQL,无法查看任何业务库,必须手动授权。

基础语法

grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码'];

语法说明

实战案例 1:给 Lotso 用户分配 test 库下所有表的只读权限

grant select on test.* to 'Lotso'@'localhost';

-- 刷新权限,这个别忘了
flush privileges;

授权后,用 whb 账号登录,就能看到 test 库,并且只能执行 select 查询,无法执行 delete、update 等操作,和参考文档效果完全一致。

实战案例 2:给 Lotso 用户分配 test 库的所有权限

grant all privileges on test.* to 'Lotso'@'localhost';

-- 刷新权限
flush privileges;

2.5.2 查看用户权限

show grants for '用户名'@'主机名';

-- 示例:查看Lotso用户的权限
show grants for 'Lotso'@'localhost';

-- 示例:查看root用户的权限
show grants for 'root'@'%';

2.5.3 回收用户权限

基础语法

revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';

实战案例:回收 Lotso 用户对 test 库的所有权限

revoke all on test.* from 'Lotso'@'localhost';

-- 刷新权限
flush privileges;

回收完成后,Lotso 账号再次登录,就无法看到 test 库了

2.6 生产环境权限最佳实践

三. 全文总结

视图核心总结

用户与权限核心总结

到此这篇关于MySQL入门实战:视图+用户权限管理使用方法(图文+代码)的文章就介绍到这了,更多相关MySQL的视图和用户权限管理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文