视图和用户管理

[复制链接]
发表于 9 小时前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
MySQL 里的视图和账号权限,是后端日常维护最常动手的两块内容。视图本质是一张虚拟表,MySQL 把一条查询的结果临时保存成表结构,之后可以直接拿它做统计查询;用户管理则是让 root 之外的账号只能碰自己该碰的库。本文把创建、修改、删除视图的步骤和命令一次讲完,再补上用户的查看、创建、改密、授权与回收。

视图到底是一张什么表

视图不算真实存在的数据表,它更像一条被起了名字的查询:视图本身占用表结构,但数据仍来自原表。建好之后,接下来的统计查询直接对着这个"表"写 SQL 就行,不必反复写那段长查询。效果如下两图所示。



创建视图的写法

创建视图用的是 create view,后面跟视图名,as 之后跟一条 select 语句,最后记得加分号:
  1. create view 视图名 as select语句;
复制代码

创建成功后的实际界面见下面两张截图。





修改视图会动到原表

视图可以直接用 update 改,写法和改普通表一样:
  1. update 视图名 set column=? where...
复制代码

改动之后你会发现一个关键点:改视图的同时,原表跟着被改了;反过来原表被改,视图也会同步变化。因为视图和表在数据上本就打通了。





删除视图的写法

不需要的视图用 drop view 删掉即可:
  1. drop view 视图名;
复制代码



使用视图要记住的六条规则

视图用起来有几个硬约束,提前记下能少踩坑:


  • 和表一样,名字必须唯一
  • 能创建的视图数量没有限制,但要留意复杂视图带来的性能影响
  • 视图上不能加索引、默认值和触发器
  • 视图内部可以用 order by;但从该视图检索数据时的 order by 会把它覆盖掉
  • 视图可以和普通表一起用,因为它本身就是表
  • 视图能提升安全性,但访问者要有足够的权限


用户管理从 root 讲起

root 能操作所有库。实际项目里更常见的做法是自己定义普通用户,让某个账号只能操作某一个库,做到权限隔离。

查看已有用户与权限表

进入 mysql 库就能看到用户表:
  1. use mysql;
  2. show tables;
  3. select * from user\G
  4. select USER,HOST,authentication_string from user;
复制代码

注意,下面这些操作本质上都只是在改 user 表而已,删改用户前心里有这张表就不慌。









创建用户的写法
  1. create user '用户名'@'登录主机/ip'identified by '密码';
复制代码

如果希望这个账号允许从任意机器(例如 Windows 客户端)远程登录,就把登录主机写成 %,等价于下面的写法:
  1. create user '用户名'@'%'identified by '密码';#可windows远程登录
复制代码

删除用户与重置密码

删用户:
  1. drop user '用户名'@'登录主机/ip';
复制代码

改密码分两种场景。root 给别人改:
  1. set password for'用户名'@'登录主机/ip'=password('新密码');
复制代码

自己改自己的:
  1. set password=password('新密码');
复制代码

给用户赋权与回收权限

刚 create 出来的用户没有任何权限,需要手动赋权。grant 后面跟权限列表(多个用逗号分隔,或者直接写 all),再接 on 库.对象名 to 用户账号:
  1. grant 权限列表(用逗号分开/all) on 库.对象名 to '用户名'@'登录主机/ip'[identified by '密码'];
复制代码

这里的 *.* 表示所有数据库下的所有对象,包括表、视图、存储过程等等。赋完权可以查一下确认:
  1. show grants for '用户名'@'登录主机/ip';
复制代码

要收回权限就换 revoke,把 from 对应上 to:
  1. revoke 权限列表(用逗号分开/all) on 库.对象名 from '用户名'@'登录主机/ip';
复制代码

视图这块记住"改视图等于改原表"这一条就够了;用户管理上,先用 show grants 看清楚原权限再决定赋多少,别一上来就给 all。

编辑提示:把本文命令抄进终端前,先确认已 use mysql 且有 root 权限;生产库建议按库建专用账号,避免直接用 root 远程登录。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表