【MySQL】视图、用户和权限管理

server/2024/12/23 6:26:13/

目录

  • 视图
    • 创建视图
    • 数据修改影响
    • 删除视图
    • 视图优点
  • 用户和权限管理
    • 查看当前的数据库拥有用户信息
    • 创建用户
    • 修改密码
    • 删除用户
    • 权限
      • 授权
      • 回收权限

视图

视图就是相当于创建一个表,将查询到的结果集给存储起来。像使用复杂的多表查询查询到的结果集就不可以对结果集操作。而使用视图就可以。

  • 视图是⼀个虚拟的表,它是基于⼀个或多个基本表或其他视图的查询结果集。

  • 视图本⾝不存储数据,⽽是通过执⾏查询来动态⽣成数据。
    ⽤⼾可以像操作普通表⼀样使⽤视图进⾏查询、更新和管理。

  • 视图本⾝并不占⽤物理存储空间,它仅仅是⼀个查询的逻辑表⽰,物理上它依赖于基础表中的数据。

  • 使用查询语句查询查询真实数据时可以拿到敏感信息,但是如果将视图传给其他人来查询就可以避免。

创建视图

create view 视图名 (视图列名可省略) as (查询结果);

创建视图时如果将列名省略,那么是由查询结果的列名作为视图列名,但是如果查询结果中列名有重复就会创建失败,需要采取给其起别名来解决。

数据修改影响

对视图的操作就跟表操作一样。

  • 修改真实表的数据会影响视图。
  • 修改视图也会影响真实表。

视图修改的条件:

  • 创建视图时不能使⽤聚合函数。
  • 创建视图时不能使⽤distinct
  • 创建视图时不能使⽤group byhaving子句。
  • 创建视图时不能使⽤unionunion all联合查询语句。
  • 查询列表中不能使⽤⼦查询。
  • from⼦句中引⽤不可更新视图。

删除视图

drop view 视图名;

视图优点

  • 简单性:视图可以将复杂的查询封装成⼀个简单的查询。例如,针对⼀个复杂的多表连接查询,可以创建⼀个视图,⽤⼾只需查询视图⽽⽆需了解底层的复杂逻辑。
  • 安全性:通过视图,可以隐藏表中的敏感数据。例如,⼀个系统的⽤⼾表中,可以创建⼀个不包含密码列视图,普通⽤⼾只能访问这个视图,⽽不能访问原始表。
  • 逻辑数据独立性:视图提供了⼀种逻辑数据独⽴性,即使底层表结构发⽣变化,只需修改视图定义,⽽⽆需修改依赖视图的应⽤程序。使⽤到应⽤程序与数据库的解耦
  • 可读性:视图允许⽤⼾重命名列名,以增强数据可读性。

用户和权限管理

在我们练习中都是使用root用户,root用户权限很大且一个数据库只有一个,在实际应用中,用户权限大小至关重要,而且还要有多个用户。

查看当前的数据库拥有用户信息

用户信息存储在系统库mysql中的user表里面。mysql库是系统库,我们不要对其修改。

语法:

use mysql;
select host, user, authentication_string from user;

名词解释:

  • host:允许登录的主机,相当于⽩名单,如果是localhost,表⽰只能从本机登陆。
  • user:⽤⼾名。
  • *_priv:⽤⼾拥有的权限,*表示多个单词,相当于通配符。
  • authentication_string :加密后的⽤⼾密码

创建用户

语法:

create user [IF NOT EXISTS] '用户名(区分⼤⼩写)'@'主机名' identified by '密码';

这样创建的用户没有任何权限。

注意事项:

  • 如果不指定host_name相当于’user_name’@‘%’,%表⽰所有主机都可以连接到数据库,强烈建
    议不要这样设置,因为会导致严重的安全问题。
  • 用户名和主机名中间的@没包含在单引号’'只内。
  • host_name可以通过⼦⽹掩码设置主机范围:
    ◦ 198.0.0.0/255.0.0.0 :A段⽹络中的任意⼀台主机;
    ◦ 198.51.0.0/255.255.0.0: 198.51 B段⽹络中的任意⼀台主机;
    ◦ 198.51.100.0/255.255.255.0: 198.51.100 C段⽹络中的任意⼀台主机;
    ◦ 198.51.100.1 :只包含特定IP地址的主机。
  • 从MySQL8.0.23开始,指定为IPv4地址的主机值可以使⽤CIDR表⽰法写⼊,例如198.51.100.44/24。
  • 允许在IP地址中使⽤%通配符,⽐如,主机值’%'匹配任何主机名, 198.51.100.% 匹配
    198.51.100 C段⽹络中的任何主机。MySQL8.0.35中已弃⽤,以后可能会删除。

示例:
添加⼀个名为ikun的新⽤⼾,允许从本机登录

 create user 'bit'@'localhost' identified by '123456';

修改密码

语法:

# 为指定⽤⼾设置密码 
alter user '用户名(区分大小写)'@'主机名' identified by '新密码';
# 为指定⽤⼾设置密码
set password for '用户名(区分大小写)'@'主机名' = '新密码';
# 为当前登录⽤⼾设置密码
set password = '新密码';

示例:

  • 以root⾝份登录,为’ikun’@'localhost’⽤⼾重置密码
 ALTER USER 'bit'@'localhost' IDENTIFIED BY '987654';
  • 以root⾝份登录,为’ikun’@'localhost’⽤⼾重置密码
SET PASSWORD FOR 'bit'@'localhost' = '123456';
  • 以ikun⽤⼾登录,修改当前登录⽤⼾的密码
 SET PASSWORD = '111111';

删除用户

语法:

drop user [if exists] '用户名(区分大小写)'@'主机名';

示例:
删除用户’ikun’@‘192.168.1.1/24’

drop user 'ikun'@'192.168.1.1/24';

权限

MySQL内置⽀持的权限列表如下:

授权

语法:

grant priv_type[, priv_type ...] on priv_level to'user_name'@'host_name' [WITH GRANT OPTION];

名词解释:

  • priv_type:根据类型,参考根据列表4.1中的Privilege列。
  • priv_level:* | . | db_name.* | db_name.tbl_name | tbl_name,⽐如*.*表⽰所有数据库下的所
    有表。
  • ‘user_name’@‘host_name’:指定⽤⼾。
  • [WITH GRANT OPTION]:可选,允许⽤⼾将⾃⼰的权限授权给其它⽤⼾。

示例:
为ikun@localhost⽤⼾授权于 java01 数据库的 select 权限。

grant select on java01.* to 'ikun'@'localhost';

回收权限

语法:

REVOKE [IF EXISTS] priv_type[, priv_type] ... ON priv_level FROM 'user_name'@'host_name' [, 'user_name'@'host_name'] ...

示例:
回收ikun@localhost⽤⼾对于 java01 数据库的权限:

REVOKE all on *.* from 'ikun'@'localhost';

http://www.ppmy.cn/server/126514.html

相关文章

【Unity】Luban学习笔记

个人向笔记。 1 前言 自己学习Luban时的一些笔记,方便以后复习。 2 Unity Luban使用流程 按照规则,创建并填写配置表。涉及类型定义(excel、xml),数据填写(excel)。借助Luban相关工具&#xf…

C语言日志类库 zlog 使用指南(第四章 Syslog模式)

第四章 Syslog模式 在zlog中,有三个重要概念:分类(Category)、规则(Rule)和格式(Format)。 4.1 分类、规则和格式 分类(Category):用于指定不同…

Rstudio:强大的R语言集成开发环境(IDE)

Rstudio 应该是 R 语言使用的标配,尽管 Rstudio 的母公司 Posit 推出了新一代的集成开发环境 Positron,但其还处于开发阶段。作为用户不妨让其成熟后再使用,现阶段还是 Rstudio 更稳定。 如果你在生物信息学或统计学领域工作,R语言…

【分布式微服务云原生】消息队列全解析:原理、应用场景与主流MQ对比

消息队列全解析:原理、应用场景与主流MQ对比 摘要 在快速发展的软件架构中,消息队列(MQ)扮演着至关重要的角色。它不仅实现了系统间的异步通信,还提供了应用解耦、流量削峰等关键功能。本文将深入探讨消息队列的工作原…

洛谷 P11045 [蓝桥杯 2024 省 Java B] 最优分组

[Problem Discription] \color{blue}{\texttt{[Problem Discription]}} [Problem Discription] [Analysis] \color{blue}{\texttt{[Analysis]}} [Analysis] 首先得注意这么一点: k k k 必须得是 n n n 的因数(这里的 n , k n,k n,k 对应于题目的 N ,…

《深度学习》OpenCV 角点检测、特征提取SIFT 原理及案例解析

目录 一、角点检测 1、什么是角点检测 2、检测流程 1)输入图像 2)图像预处理 3)特征提取 4)角点检测 5)角点定位和标记 6)角点筛选或后处理(可选) 7)输出结果 3、邻域…

C++ 线性表、内存操作、 迭代器,数据与算法分离。

线性表: 线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的 一种,一个线性表是n个具有相同特性的数据元素的有限序列。 线性表中数据元素之间的关系是一对一的关系,即除了第一个和…

【git】通过配置 `init.defaultBranch`,自定义 Git 初始化时的默认分支名称,避免使用 `master` 并消除相关的警告提示

Git 会提示你配置一个默认的初始分支名称 git init 提示:使用 ‘master’ 作为初始分支的名称。这个默认分支名称可能会更改。要在新仓库中 提示:配置使用初始分支名,并消除这条警告,请执行: 提示: 提示&am…