总言
主要内容:介绍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 '用户名'@'登陆位置';
演示如下:(此处紧接授予权限的示例)