总言
  主要内容:介绍MySQL中视图和用户管理。
   
   
   
   
文章目录
- 总言
- 1、视图
- 1.1、基本介绍
- 1.2、相关操作
- 1.2.1、创建及查看视图
- 1.2.2、修改视图
- 1.2.3、更新视图
- 1.2.4、删除视图
 
 
- 2、用户管理
- 2.1、用户管理
- 2.1.1、基本介绍
- 2.1.2、使用用户登录MySQL服务器
- 2.1.1、查看用户信息
- 2.1.2、创建用户
- 2.1.3、删除用户
- 2.1.4、修改用户密码
 
- 2.2、数据库的权限
- 2.2.1、基本介绍(权限列表)
- 2.2.2、授予权限
- 2.2.3、查看权限
- 2.2.4、收回权限
 
 
- Fin、共勉。
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 USER、GRANT、REVOKE和DROP 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),则用户账号被锁定,用户无法登录。
 
   Plugin 和 authentication_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)、常用权限介绍
- CREATE和- DROP权限: 可以创建新的数据库和表,或删除(移掉)已有的数据库和表。如果将MySQL数据库中的DROP权限授予某用户,用户就可以删除MySQL访问权限保存的数据库。
- SELECT、- INSERT、- UPDATE和- DELETE权限:允许在一个数据库现有的表上实施检索、插入、修改、删除操作。
- 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、共勉。




















