当前位置: 首页 > ds >正文

MySQL-视图与用户管理

目录

一、视图

1. 基本使用

2. 视图规则和限制

二、用户管理

1. 用户相关操作

2. 数据库的权限管理


在 MySQL 的世界里,视图和用户管理是两个非常关键的知识点。视图能让我们更灵活地查询数据,用户管理则保障了数据库的安全访问。今天,咱们就来好好聊聊这两块内容。

一、视图

视图是一个虚拟表,它的内容由查询定义。就像真实的表一样,视图包含列和行数据,而且视图和基表之间数据是相互影响的,视图的数据变化会影响基表,基表的数据变化也会影响视图。

1. 基本使用

- 创建视图:用  create view 视图名 as select语句;  就能创建视图。比如要创建一个关联员工表(EMP)和部门表(DEPT),展示员工姓名(ename)和部门名称(dname)的视图  v_ename_dname ,可以这样写:

create view v_ename_dname as select ename, dname from EMP, DEPT where EMP.deptno=DEPT.deptno;

然后查询这个视图  select * from v_ename_dname; ,就能看到相关数据啦。

- 视图与基表的相互影响:

- 修改视图会影响基表,比如执行  update v_ename_dname set dname='sales' where ename='CLARK'; ,再查询基表中  CLARK  的数据,会发现已经改变。

- 修改基表也会影响视图,像  update EMP set deptno=20 where ename='JAMES'; ,之后查询视图里  JAMES  的数据,也会有变化。

- 删除视图:用  drop view 视图名;  就可以删除视图啦。

2. 视图规则和限制

- 视图得唯一命名,不能和已有的视图或表重名。

- 创建视图的数量没限制,但复杂查询创建视图后要考虑性能影响。

- 视图不能加索引,也不能有关联的触发器或默认值。

- 视图能提高安全性,不过得有足够的访问权限。

-  order by  可以用在视图里,但如果从视图检索数据的  select  语句也有  order by ,视图里的  order by  会被覆盖。

- 视图还能和表一起使用。

3. 实战:创建演员视图

比如针对  actor  表创建视图  actor_name_view ,可以这样写:

create view actor_name_view as select * from actor;

二、用户管理

要是只使用  root  用户,会存在安全隐患,这时候就需要进行 MySQL 的用户管理啦。不同用户可以被赋予不同数据库的操作权限,像张三只能操纵  mytest  库,李四只能操纵  msg  库,这样能大大降低风险。

1. 用户相关操作

MySQL 中的用户,都存储在系统数据库  mysql  的  user  表中。

- 查看用户信息:可以先  use mysql;  切换到  mysql  数据库,然后执行  select host,user,authentication_string from user;  来查看用户信息,也能通过  desc user  初步查看表结构。其中  host  表示用户可登录的主机, localhost  就表示只能从本机登录; user  是用户名; authentication_string  是用户密码通过  password  函数加密后的值; *_priv  是用户拥有的权限。

- 创建用户:语法是  create user '用户名'@'登陆主机/ip' identified by '密码'; 。比如创建用户  whb ,只能从本机登录,密码是  12345678 ,就可以写  create user 'whb'@'localhost' identified by '12345678'; 。不过要注意,MySQL 本身认证等级较高,简单密码可能设置不了,遇到  ERROR 1819 (HY000): Your password does not satisfy the current policy requirements  这样的报错,可以去查看密码设置相关要求( SHOW VARIABLES LIKE 'validate_password%'; ),再进行调整。而且不要轻易添加能从任意地方登录的用户。

- 删除用户:语法是  drop user '用户名'@'主机名' 。比如删除用户  whb @ localhost ,就执行  drop user 'whb'@'localhost'; 。要注意直接给用户名,不指定主机名是删不掉的,因为默认是  % ,表示所有地方都能登录的用户。

- 修改用户密码:自己改自己密码用  set password=password('新的密码'); ; root  用户修改指定用户的密码用  set password for '用户名'@'主机名'=password('新的密码'); 。比如  root  用户修改  whb @ localhost  的密码为  87654321 ,就执行  set password for 'whb'@'localhost'=password('87654321'); 。

2. 数据库的权限管理

MySQL 数据库提供了丰富的权限,像  CREATE (用于数据库、表或索引)、 DROP (用于数据库或表)、 SELECT (用于表)等等。

- 给用户授权:刚创建的用户没有任何权限,需要给用户授权。语法是  grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码'] 。权限列表里多个权限用逗号分开, *.*  代表本系统中所有数据库的所有对象(表、视图、存储过程等), 库.*  表示某个数据库中的所有数据对象。 identified by  是可选的,如果用户存在,赋予权限的同时会修改密码;如果用户不存在,就会创建用户。比如给用户  whb  赋予  test  数据库下所有文件的  select  权限,就执行  grant select on test.* to 'whb'@'localhost'; 。授权后如果没生效,可以执行  flush privileges;  刷新权限。

- 回收权限:语法是  revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置'; 。比如回收  whb  对  test  数据库的所有权限,就执行  revoke all on test.* from 'whb'@'localhost'; 

掌握了视图和用户管理,咱们在 MySQL 中操作数据就更得心应手啦,既能灵活查询,又能保障安全~

http://www.xdnf.cn/news/19586.html

相关文章:

  • Langchain指南-关键特性:如何流式传输可运行项
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘SQLModel’问题
  • 案例——从零开始搭建 ASP.NET Core 健康检查实例
  • 齿轮加工刀具材料漫谈:从高速钢到陶瓷的 “切削艺术”
  • 传统数据库out啦!KINGBASE ES V9R1C10 开启国产数据库“修仙”新纪元!
  • Day19_【机器学习—线性回归 (2)】
  • 正则表达式 Python re 库完整教程
  • 生存分析入门教程
  • 馈电油耗讲解
  • AssemblyLoadContext`的插件化架构
  • Qt libcurl的下载、配置及简单测试 (windows环境)
  • springboot项目启动时打印maven打包时间
  • [Mysql数据库] 知识点总结8
  • 计算机网络:(十六)TCP 的运输连接管理
  • Ring Buffer解析
  • 仓颉语言Web框架中的路由分组
  • linux系统学习(6.软件包管理)
  • 十分钟快速掌握 YML YAML 文件
  • 07.《交换机三层功能、单臂路由与端口安全基础知识》
  • 在Linux环境安装Maven(保姆级别)
  • leetcode 面试题 01.01.判定字符是否唯一
  • 【高级】系统架构师 | 信息系统基础
  • 基于Seurat的空转单样本数据分析流程学习(一)
  • JavaScript中的XMLHttpRequest对象分析
  • 基于单片机智能保温杯/智能水杯
  • Java基础第7天总结(代码块、内部类、函数式编程)
  • 【多模态】使用LLM生成html图表
  • 打开多个Excel文件后快速关闭所有的文档,并且退出Excel应用
  • s[:] = reversed(s) 和 s = reversed(s)的区别
  • 【Proteus仿真】点亮小灯系列仿真——小灯闪烁/流水灯/交通灯