视图
1. 什么是视图
视图(View)是一个虚拟表。同真实表类似,视图包含一系列行和列数据。行和列数据来源于自由定义视图查询所引用的表,并且在引用视图时动态生成。
使用视图的目的在于:
- 隐藏原始表中的某些信息。
- 方便关联表查询。
2. 创建视图
CREATE VIEW 视图名[(列列表)]
AS 一条查询语句
3. 删除视图
DROP VIEW 视图名;
4. 查看视图信息
select * from information_schema.views;
5. 对视图的操作
对视图可以像对待表一样进行操作,但是由于视图只是虚拟表,所以你对视图的任何操作,最终都会反映到视图背后的表上。
MySQL 用户管理
MySQL 是一个多用户数据库管理系统,除了默认存在的 root 用户外可以额外地在创建用户,设置密码,并指定新用户对数据库的操作权限。
以上所说操作依赖于超级管理员账户 root ,即只有 root 账户才能执行上述所说操作。
1.创建新用户
使用 CREATE USER 语句可以创建新账户。
CREATE USER <用户名>@<主机名> IDENTIFIED WITH <认证插件> BY '<密码>';
例如:
CREATE USER tom@% IDENTIFIED WITH mysql_native_password BY '123456';
警告
不要使用其它的、间接的方式来创建型账户。
2.删除已有用户
如果需要删除已有用户账户,使用 DROP USER 语句:
DROP USER <用户名>@<主机名>;
3.修改密码
如果需要修改已有用户账户的密码,使用 SET PASSWORD 语句:
这里涉及到一个 [[202209031907|认证插件]] 的概念。
- mysql 8.0.4 及以后
ALTER USER '<用户名>'@'<主机名>' IDENTIFIED WITH mysql_native_password BY '<新密码>';
FLUSH PRIVILEGES;
- mysql 8.0.4 之前
SET PASSWORD FOR <用户名>=PASSWORD('<新密码>');
FLUSH PRIVILEGES;
MySQL 访问权限管理
在新建用户后必须分配访问权限,因为「用户账号」和「访问权限」是两个独立的概念:
-
用户账号决定是否可以连接、登陆数据库;
-
访问权限决定了能对数据库做哪些操作。
因此,纯粹的新用户逻辑上没有任何使用价值(他们可以登录、连接到 MySQL,但不能进行任何数据库操作)。
在进行权限判断、控制时,MySQL 可以细化到设置用户从 A 电脑登陆的时候有某种权限,从 B 电脑登陆时又是其他的权限。因为,它使用「用户名」和「主机名」来认定用户身份。例如 tom@127.0.0.1 。
在设置用户的权限时,如果没有特别指定是他从「哪台」电脑上登录时的权限,那么就使用 % 表示其从任何电脑上登录时的权限,即 用户名 等同于 用户名@% ,这里的 % 表示所有电脑。
为设置权限,使用 GRANT 语句,GRANT 要求你至少给出以下信息:
- 要授予的权限
- 要被授予访问权限的数据库或表
- 用户名
GRANT 权限1, 权限2, ... ON 数据库.表 TO 用户名;
例如:
GRANT ALL ON scott.department TO root;
数据库.表名 部分可以使用通配符 * 。A.* 表示 A 数据库下的所有表。*.* 表示所有数据库中的所有表。
常见权限 | 说明 |
---|---|
ALL | 所有权限 |
SHOW DATABASES | 允许使用 SHOW DATABASES 语句 |
CREATE | 允许使用 CREATE TABLE 语句 |
DROP | 允许使用 DROP TABLE 语句 |
INSERT | 允许使用 INSERT 语句 |
DELETE | 允许使用 DELETE 语句 |
UPDATE | 允许使用 UPDATE 语句 |
SELECT | 允许使用 SELECT 语句 |
USAGE | 无访问权限 |
GRANT 操作的反向操作是 REVOKE,用它来剥夺特定的权限:
REVOKE 权限1, 权限2, ... ON 数据库.表名 FROM 用户名;