【ONE·MySQL || 视图和用户管理】

总言

  主要内容:介绍MySQL中视图和用户管理。
  
  
  
  


  
  
  
  

1、视图

1.1、基本介绍

  1)、基表与视图
  1、在Mysql中,基本表是最常见的数据存储形式。它是数据库中存储数据的物理结构,由行和列组成。每一行表示一条记录,每一列代表一个属性。基本表是数据库的核心组成部分,用于存储和管理实际的数据。

  主要特点包括:

存储实际数据
使用INSERT、UPDATE、DELETE等语句来操作数据
可以定义索引来提高查询效率

  

  2、视图是基于一个或多个基本表的查询结果的虚拟表。 它是一个逻辑概念,不实际存储数据,但可以像基本表一样使用。同真实的表一样,视图包含一系列带有名称的列和行数据。

  视图的特点包括:

不存储实际数据,只保存查询定义
可以像基本表一样使用,进行CRUD操作
可以简化复杂查询和保护数据安全

  
  
  
  2)、视图优缺点
  视图的主要优点:
  简化复杂的SQL:你可以创建一个视图来隐藏复杂的SQL逻辑,使其看起来像一个简单的表。
  安全性:通过视图,可以限制用户对基础数据的访问,只显示他们需要的列和数据。
  逻辑数据独立性:当基础表的结构发生变化时,可以修改视图来保持相同的外观,从而隐藏这些变化。
  
  
  视图的主要缺点:
  查询效率:视图的查询效率可能会低于直接查询基本表,因为视图需要在查询时动态生成结果。
  更新限制:由于视图是基于基本表的查询结果,对视图的更新操作可能会受到限制。例如,视图中使用了聚合函数或GROUP BY子句,则不能对视图进行更新。
  存储空间:虽然视图不存储实际数据,但是需要占用一定的存储空间来保存查询定义。
  
  
  
  
  3)、视图规则和限制

  • 与基表一样,视图必须唯一命名(不能出现同名视图或表名)
  • 创建视图数目无限制,但要考虑复杂查询创建为视图之后的性能影响
  • 视图不能添加索引,也不能有关联的触发器或者默认值
  • 视图可以提高安全性,必须具有足够的访问权限
  • order by 可以在视图中使用,但是如果从该视图检索数据 select 中也含有 order by ,那么该视图中的 order by 将被覆盖
  • 视图可以和表一起使用
      
      
      
      
      
      
      
      
      
      

1.2、相关操作

1.2.1、创建及查看视图

  1)、基本语法
  在Mysql中,可以使用CREATE VIEW语句来创建视图。

create view 视图名 as select语句;

--展开举例即:(select语句展开)
CREATE VIEW view_name AS  
SELECT column1, column2, ...  
FROM table_name  
WHERE condition

  视图一旦创建完毕,就可以像一个普通表那样使用,视图主要用来查询

  
  2)、相关演示
  创建视图:
在这里插入图片描述
  
  查看视图信息:
在这里插入图片描述

  
  
  
  
  

1.2.2、修改视图

  修改视图是指修改数据库中已存在表的定义。 当基本表的某些字段发生改变时,可以通过修改视图来保持视图和基本表之间一致。在MySQL中通过CREATE OR REPLACE VIEW语句和ALTER语句来修改视图。

CREATE [ OR REPLACE ] (ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS SELECT_statement
[WITH [CASCADED | LOCAL ] CHECK OPTION ]

  
  ALTER语句是MySOL提供的另外一种修改视图的方法:

ALTER [ ALGORITHM = { UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS SELECT_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]

  
  
  
  
  
  

1.2.3、更新视图

  视图是虚拟表,更新视图中的数据,实际上就是在更新建立视图的基本表中的数据。例如,当我们删除视图中的数据时,基本表中的数据也同样会被删除,因此用户在更新视图时要小心谨慎。
  更新视图可以更新(update)、插入(insert)和删除(delete)对应基本表中的数据。

UPDATE 视图名 SET 字段名1=1 [,字段名2=2, .... [WHERE 条件表达式] ;

INSERT INTO 视图名 VALUES (1,2, ... ;

DELETE FROM表名[WHERE 条件表达式] ;

  
在这里插入图片描述

  
  
  
  
  
  

1.2.4、删除视图

  当视图不再需要时,可以将其删除,删除一个或多个视图(删除多个视图时,名称之间用,分隔):

DROP VIEW[IF EXIsTs] view_name1 [,view_name2]... [RESTRICT | CASCADE];

在这里插入图片描述

  
  
  
  
  
  
  

2、用户管理

2.1、用户管理

2.1.1、基本介绍

  MySQL数据库的安全性需要通过账户管理来保证,用户是用于访问数据库服务器的身份标识。每个用户都与一个或多个主机名相关联,并具有一组权限,这些权限决定了该用户可以在MySQL服务器上执行哪些操作。
   和Linux一样,MySQL用户也可以分为普通用户和root用户

  • root用户:是超级管理员,拥有所有权限,包括创建用户、删除用户和修改用户的密码等管理权限。
  • 普通用户:只拥有被授予的各种权限。

  MySQL提供了很多语句用来管理用户账号,这些语句可以用来管理包括登录和退出MySQL服务器,创建用户,删除用户、密码管理和权限管理等内容。
  
  
  
  

2.1.2、使用用户登录MySQL服务器

  MySQL登录,我们在之前也介绍过(相关链接)。启动MySQL服务后,可以通过mysql命令来登录MySQL服务器:

mysql –h hostname|hostIP –P port –u username –p DatabaseName –e "SQL语句"

  参数介绍:
  -h参数后面接主机名或者主机IP,hostname主机名hostIP主机IP
  -P参数后面接MySQL服务的端口,通过该参数连接到指定的端口。MySQL服务的默认端口是3306,不使用该参数时自动连接到3306端口,port为连接的端口号。
  -u参数后面接用户名,username用户名
  -p参数会提示输入登录密码
  DatabaseName参数指明登录到哪一个数据库中。如果没有该参数,就会直接登录到MySQL数据库中,然后可以使用USE命令来选择数据库。
  -e参数后面可以直接加SQL语句。登录MySQL服务器以后即可执行这个SQL语句,然后退出MySQL服务器。
  
  
  演示如下:
在这里插入图片描述

  
  
  
  
  

2.1.1、查看用户信息

  1)、查看user表
  在MySQL中,用户信息存储在mysql数据库的user表中。这个表包含了MySQL服务器的用户账号、主机名、密码哈希值、权限等信息。
  
在这里插入图片描述

  通常,我们不通过直接修改这个表来管理用户,因为MySQL提供了CREATE USERGRANTREVOKEDROP USER等SQL命令来管理用户及其权限。
  
  
  
  2)、user表中一些字段解释
  以下为user表中的一部分字段。实际上,该表包含了许多其他字段,用于存储与用户和权限相关的各种设置和配置。


  Host

  • 这个字段指定了用户可以从哪些主机连接到MySQL服务器。例如,‘localhost’表示用户只能从本地主机连接,而’%'表示用户可以从任何主机连接。
  • 在组合Host和User字段时,它们唯一地标识了一个MySQL用户。

  
  User

  • 这个字段存储了用户的名称。与Host字段结合使用时,它确定了哪些用户可以连接到MySQL服务器。
      

  authentication_string(或Password,取决于MySQL版本):

  • 这个字段存储了用户的密码哈希值。出于安全原因,MySQL不会以明文形式存储密码。
  • 在MySQL 5.7及更高版本中,密码哈希存储在authentication_string字段中。而在较旧的版本中,密码哈希可能存储在Password字段中。
  • 更改用户密码时,该字段的值会更新。

   Select_priv, Insert_priv, Update_priv, ...

  • 这些字段是布尔类型的,用于控制用户对特定数据库或表的各种操作权限。它们可以针对全局(所有数据库)、特定数据库或特定表进行设置。
  • 例如,Select_priv字段用于控制用户是否有权从表中检索数据。
      

   Grant_priv

  • 这个字段控制用户是否有权授予其他用户权限。
  • 只有具有GRANT OPTION权限的用户才能修改其他用户的权限。
      

   Account_locked(在某些MySQL版本中):

  • 这个字段用于锁定或解锁用户账号。
  • 如果设置为Y(或1),则用户账号被锁定,用户无法登录。
      

   Pluginauthentication_string_length

  • 这些字段与用户的身份验证插件和密码哈希长度相关。
  • MySQL支持多种身份验证插件,这些插件决定了如何验证用户的密码。
      

  
  
  

  3)、如何理解用户管理?
  MySQL中,所有的用户管理工作(如创建用户、删除用户、修改用户权限等),全部都是在这张user表中进行的。所有用户管理工作对应的SQL语句,本质其实都是对这个表进行增删查改操作(CURD)。

在这里插入图片描述

  但通常不推荐直接操作user表(除非对MySQL的内部实现有深入的了解,并且知道如何正确地更新和维护这些表),一般我们倾向于使用专门的SQL语句进行用户管理(更为安全、可靠和易于理解)。
  
  
  
  
  

2.1.2、创建用户

  使用CREATE USER语句来创建一个新用户。

CREATE USER  '用户名'@'登陆主机/ip'  [IDENTIFIED BY '密码'];

  说明:
  1、新建用户的账户,由用户(User)和主机名(Host)构成
  2、“[ ]”表示可选。也就是说,可以指定用户登录时需要密码验证,也可以不指定密码验证,这样用户可以直接登录。不过,不指定密码的方式不安全,不推荐使用。 如果指定密码值,这里需要使用IDENTIFIED BY指定明文密码值
  3、CREATE USER语句可以同时创建多个用户
  
  演示如下:实际这里的创建就相当于往表格中Insert插入一条记录,但我们一般推荐使用MySQL提供的专门语句,而非直接使用增删查改操作(CURD)。
在这里插入图片描述

  登录该用户查看一下:
在这里插入图片描述
  
  
  
  
  
  
  

2.1.3、删除用户

  可以使用DROP USER语句来删除用户。但操作用户需要拥有DROP USER权限。 DROP USER 语句的基本语法如下:

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

在这里插入图片描述
  
  旧版本的MySQL(5.7.6之前),可以使用delete方式删除(需要具有足够的权限,这种方法不推荐用于现代MySQL版本):

DELETE FROM mysql.user WHERE host='hostname' AND user='username';
FLUSH PRIVILEGES; --执行完DELETE命令后要使用FLUSH命令来使用户生效

  
  
  
  
  
  
  

2.1.4、修改用户密码

  可以使用条件筛选语句,直接对user表中的用户密码进行修改(但非正式,一般不推荐)

--使用ALTER USER语句(MySQL 5.7.6及更高版本)
ALTER USER 'username'@'hostname' IDENTIFIED BY 'new_password';

--使用UPDATE语句修改普通用户的密码(不推荐)
UPDATE user SET authentication_string=PASSWORD("123456") WHERE user = "username" AND host = "hostname";

在这里插入图片描述

   刷新权限说明: 在修改了用户密码后,为了确保更改立即生效,你可能需要执行FLUSH PRIVILEGES;命令来刷新MySQL的权限表。
  
  
  
  一般而言,我们比较推荐使用MySQL为user提供的SQL语句修改用户密码:

--设置当前用户密码
SET PASSWORD = PASSWORD('123456');
SET PASSWORD='new_password';

--root用户修改指定用户的密码
SET PASSWORD FOR 'username'@'hostname'='new_password';

  
  自己修改自己密码的情况演示:

在这里插入图片描述
  
  root用户修改密码的情况演示:

在这里插入图片描述
  
  
  
  
  
  
  
  
  

2.2、数据库的权限

2.2.1、基本介绍(权限列表)

  1)、MySQL权限
  在MySQL中,权限控制是确保数据库安全性的重要部分。通过授予和撤销用户权限,我们可以控制哪些用户可以访问数据库、可以执行哪些操作以及可以访问哪些特定的数据库或表。
  
  

  2)、权限列表
  MySQL到底都有那些权限呢?可通过show privileges;指令查看:

mysql> show privileges;
+-------------------------+---------------------------------------+-------------------------------------------------------+
| Privilege               | Context                               | Comment                                               |
+-------------------------+---------------------------------------+-------------------------------------------------------+
| Alter                   | Tables                                | To alter the table                                    |
| Alter routine           | Functions,Procedures                  | To alter or drop stored functions/procedures          |
| Create                  | Databases,Tables,Indexes              | To create new databases and tables                    |
| Create routine          | Databases                             | To use CREATE FUNCTION/PROCEDURE                      |
| Create temporary tables | Databases                             | To use CREATE TEMPORARY TABLE                         |
| Create view             | Tables                                | To create new views                                   |
| Create user             | Server Admin                          | To create new users                                   |
| Delete                  | Tables                                | To delete existing rows                               |
| Drop                    | Databases,Tables                      | To drop databases, tables, and views                  |
| Event                   | Server Admin                          | To create, alter, drop and execute events             |
| Execute                 | Functions,Procedures                  | To execute stored routines                            |
| File                    | File access on server                 | To read and write files on the server                 |
| Grant option            | Databases,Tables,Functions,Procedures | To give to other users those privileges you possess   |
| Index                   | Tables                                | To create or drop indexes                             |
| Insert                  | Tables                                | To insert data into tables                            |
| Lock tables             | Databases                             | To use LOCK TABLES (together with SELECT privilege)   |
| Process                 | Server Admin                          | To view the plain text of currently executing queries |
| Proxy                   | Server Admin                          | To make proxy user possible                           |
| References              | Databases,Tables                      | To have references on tables                          |
| Reload                  | Server Admin                          | To reload or refresh tables, logs and privileges      |
| Replication client      | Server Admin                          | To ask where the slave or master servers are          |
| Replication slave       | Server Admin                          | To read binary log events from the master             |
| Select                  | Tables                                | To retrieve rows from table                           |
| Show databases          | Server Admin                          | To see all databases with SHOW DATABASES              |
| Show view               | Tables                                | To see views with SHOW CREATE VIEW                    |
| Shutdown                | Server Admin                          | To shut down the server                               |
| Super                   | Server Admin                          | To use KILL thread, SET GLOBAL, CHANGE MASTER, etc.   |
| Trigger                 | Tables                                | To use triggers                                       |
| Create tablespace       | Server Admin                          | To create/alter/drop tablespaces                      |
| Update                  | Tables                                | To update existing rows                               |
| Usage                   | Server Admin                          | No privileges - allow connect only                    |
+-------------------------+---------------------------------------+-------------------------------------------------------+
31 rows in set (0.00 sec)

mysql> 

  相关解释:
在这里插入图片描述
  
  

  3)、常用权限介绍

  • CREATEDROP权限: 可以创建新的数据库和表,或删除(移掉)已有的数据库和表。如果将MySQL数据库中的DROP权限授予某用户,用户就可以删除MySQL访问权限保存的数据库。
  • SELECTINSERTUPDATEDELETE权限:允许在一个数据库现有的表上实施检索、插入、修改、删除操作。
  • INDEX权限:允许创建或删除索引,INDEX适用于已有的表。如果具有某个表的CREATE权限,就可以在CREATE TABLE语句中包括索引定义。
  • ALTER权限 :可以使用ALTER TABLE来更改表的结构和重新命名表。
  • CREATE ROUTINE权限用来创建保存的程序(函数和程序),ALTER ROUTINE权限用来更改和删除保存的程序, EXECUTE权限用来执行保存的程序。
  • GRANT权限: 允许授权给其他用户,可用于数据库、表和保存的程序。
  • FILE权限:使用户可以使用LOAD DATA INFILE和SELECT … INTO OUTFILE语句读或写服务器上的文件,任何被授予FILE权限的用户都能读或写MySQL服务器上的任何文件(说明用户可以读任何数据库目录下的文件,因为服务器可以访问这些文件)。
      
      
      
      
      
      
      

2.2.2、授予权限

  用户是数据库的使用者,我们可以通过给用户授予访问数据库中资源的权限,来控制使用者对数据库的访问,消除安全隐患。

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

  1、权限列表:如果要一次授予多个权限, 则彼此间使用分开。

grant select on ...
grant select, delete, create on ....
grant all [privileges] on ... -- 表示赋予该用户在该对象上的所有权限

  2、数据库名称.表名
  *.*,表示本系统中的所有数据库的所有对象(表,视图,存储过程等)
  库.* ,表示某个数据库中的所有数据对象(表,视图,存储过程等)
  
  3、identified by:可选选项。 如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户。(PS:在MySQL 8.0.11版本之后,不允许使用GRANT命令创建用户了,也就是说在8.0.11之后的版本,必须先创建用户,再赋予权限)
  
  
在这里插入图片描述

  
  
  
  

2.2.3、查看权限

  查看当前用户权限:

show grants;
show grants for current_user;
show grants for current_user();

  查看某个用户的全局权限:

show grants for 'user'@'host';

  演示如下:
在这里插入图片描述

  
  
  
  

2.2.4、收回权限

  收回用户不必要的权限可以在一定程度上保证系统的安全性。(PS:有些权限可能需要被操作的用户重新登录后才生效。)

revoke 权限列表 on 数据库名称.表名 from '用户名'@'登陆位置'

  
  演示如下:(此处紧接授予权限的示例)

在这里插入图片描述

  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  

Fin、共勉。

在这里插入图片描述

  • 29
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值