【MySQL】用户管理

文章目录


一、MySQL视图特性

视图 是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。

这里我们需要注意的是,视图中的数据并不会单独存储在数据库中,其数据来自定义视图时查询所引用的表(基表),在每次引用视图时动态生成。

视图的基本使用

准备测试表

下面用 员工表部门表 作为测试表,员工表中的 ename 代表的是员工的姓名,deptno 代表的是员工所在部门的部门号。如下:

部门表中的dname代表的是部门名、deptno代表的是部门的部门号。如下:

创建视图

创建视图的SQL语句如下:

sql 复制代码
CREATE VIEW view_name AS SELECT ...;

这里我们需要注意的是,创建视图时会先执行 select 语句,然后用查询得到的结果来创建视图。

例如:当我们查询每个员工对应的部门名称时,需要使用员工表和部门表进行多表查询,并筛选出员工的部门号等于部门的部门号的记录。如下:

如果该结果经常需要被用到,那么我们就可以给上述查询结果创建视图, 创建完毕后通过show命令就可以看到这个视图。如下:

在数据库对应的目录下,会增加一个对应的 xxx.frm 文件,但并没有与之对应的 xxx.ibd 文件,这也证明了视图和基表使用的是同一份数据。如下:

创建视图后就可以直接通过查询视图,来查看每个员工及其对应的部门名称了。

修改视图会影响基表

通过查询员工表,可以看到员工CLARK所在部门的部门号为10。如下:

进一步查询部门表,可以看到10号部门的部门名称为ACCOUNTING。

在视图中将员工CLARK所在部门的部门名改为HR后,会看到其他一些员工所在部门的部门名也变为HR了。

根本原因就是因为视图和基表使用的是同一份数据,将视图中CLARK所在部门的部门名改为HR后,部门表中10号部门的部门名也就变成HR了。如下:

修改基表影响视图

通过查询员工表,可以看到员工JAMES所在部门的部门号为30。

30号部门的部门名为SALES,因此查询视图时可以看到JAMES所在的部门名为SALES。

现在将员工表中,员工JAMES对应的部门号改为20。

修改后再查询视图,就会发现JAMES所在部门的部门名,变成了20号部门的部门名RESEARCH。

删除视图

删除视图的SQL如下:

sql 复制代码
DROP VIEW view_name;

且该视图在数据库目录下对应的xxx.frm文件也会被删除


视图规则和限制

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

二、MySQL用户管理

用户

如果我们只能使用 root 用户,这样存在安全隐患。因为 root 用户的权限实在是太高了,一不小心就有可能会从删库到跑路。这时,就需要使用 MySQL 的 用户管理

如果一个用户只需要访问MySQL中的某一个数据库,甚至数据库中的某一个表,那么可以为其创建一个普通用户,并为该用户赋予对应的权限,而不让该用户看到数据库中的其他数据,防止该用户对其他数据进行误操作。


用户信息

MySQL当中默认有一个名为 mysql 的数据库。

查看该数据库中的表,可以看到其中有一个名为user的表。

user表中存储的就是MySQL中用户相关的信息。如下:

部分字段说明:

  • user: 表示该用户的用户名。
  • host: 表示该用户可以从哪个主机登录,localhost表示只能从本机登录,%表示可以从任意地方登录。
  • authentication_string: 表示该用户的密码经过password函数加密后的值。
  • xxx_priv: 表示该用户是否拥有对应权限。

在查看用户信息时为了避免刷屏,可以只选择其中的部分字段进行显示。如下:

需要注意的是,MySQL中可以存在同名的用户,只要这些同名用户对应的登录主机不同即可,因为user表中的主键是复合主键,由表中的user列和host列共同承担。如下:


创建用户

创建用户的SQL如下:

sql 复制代码
CREATE USER '用户名'@'登录主机' IDENTIFIED BY '密码';

比如下面创建一个用户名为cjl,并且可以从任意地方登录的用户。

创建用户成功后,该用户的相关信息也就被写入到刚才的user表中了。如下:

这时便可以用新创建的普通用户来连接MySQL服务器了。如下:

由于我们创建的这个用户可以从任意地方登录,因此如果你在Windows下也安装了MySQL,那么就可以在Windows的cmd窗口进行远程登录。

说明一下:

  • 创建用户的SQL当中包含用户的密码,因此该SQL不会被历史记录下来,所以不能通过上下键进行追溯。
  • MySQL本身的认证级别比较高,因此创建用户时设置的密码不能太简单,否则会出现报错,这时你可以选择将密码设置复杂一些,也可以对密码相关的设置进行调整。

通过show命令查看全局变量,可以看到密码设置相关的要求。如下:


修改用户密码

用户自己修改自己的密码

用户可以自己通过调用password函数,将新密码加密后的值设置到自己password当中。

超级用户修改任意用户的密码

超级用户可以通过调用password函数,将新密码加密后的值设置到指定用户的password当中。

当我们修改密码后,可以使用 flush privileges 刷新一下。


删除用户

删除用户的SQL如下:

sql 复制代码
DROP USER '用户名'@'登录地址';

比如将刚才创建的用户删除后,该用户在user表中对应的记录也就不存在了。如下:

说明一下:

  • 删除用户时如果不指明待用户的登录地址,则默认删除的是登录地址为%的用户。

数据库的权限

MySQL中的权限

需要注意的是,新创建的用户没有任何权限,因此创建用户后需要给用户授权。


给用户授权

给用户授权的SQL如下:

sql 复制代码
GRANT 权限列表 ON 库名.对象名 TO '用户名'@'登录地址' [IDENTIFIED BY '密码'];
  • '用户名'@'登录地址':表示给哪一个用户授权。
  • 库名.对象名:表示要授予用户哪个数据库下的哪个对象的权限。
  • 权限列表:表示要授予用户何种权限,多个权限之间用逗号隔开。
  • IDENTIFIED BY '密码' 可选:如果用户存在,则在授予权限的同时修改该用户的密码,如果用户不存在,则创建该用户。

比如下面创建用户cjl,并授予用户在scott数据库下所有对象的select权限。

授权后通过show grants for '用户名'@'登录地址'命令,可以查看该用户现有的权限。如下:

说明一下:

  • 创建用户后该用户默认会有USAGE权限,该权限只能用于数据库登录,不能执行任何操作。
  • *.* 表示所有数据库的所有对象,库名.* 表示某个数据库的所有对象(表、视图、存储过程等)。

此时该用户查看数据库时,就能查看到scott数据库了。如下:

创建用户后该用户默认只能看到information_schema数据库,该数据库中保存的是MySQL服务器所维护的所有其他数据库的信息。
进入scott数据库后,也能查看其中的所有表。 如下:

但该用户目前只能查看表中的信息,而不能对表中的数据进行修改,因为我们只授予了该用户select权限。

下面将scott数据库下的所有权限都授予该用户。

这时该用户才可以对表中的数据进行其他操作。


回收权限

回收权限的SQL如下:

sql 复制代码
REVOKE 权限列表 ON 库名.对象名 FROM '用户名'@'登录地址';

回收权限的语法与授权一样,只不过将to关键字改为了from,并且没有了IDENTIFIED BY '密码' 字段。

比如下面将cjl用户在scott数据库下的所有权限回收。

说明一下:

  • 回收用户在某一数据库下的权限后,在该用户下一次进入该数据库时才会起作用。
  • 如果回收权限时该用户正在使用对应数据库,那么回收权限后该用户仍然拥有对应的权限。

相关推荐
白鲸开源7 分钟前
(二)从分层架构到数据湖仓架构:数据仓库分层下的技术架构与举例
大数据·数据库·数据分析
阿维的博客日记8 分钟前
从夯到拉的Redis和MySQL双写一致性解决方案排名
redis·分布式·mysql
好玩的Matlab(NCEPU)11 分钟前
Redis vs RabbitMQ 对比总结
数据库·redis·rabbitmq
21号 113 分钟前
16.MySQL 服务器配置与管理
服务器·数据库·mysql
我的offer在哪里17 分钟前
MongoDB
数据库·mongodb
SamDeepThinking1 小时前
为超过10亿条记录的订单表新增字段
mysql
练习时长一年2 小时前
AI开发结构化输出
数据库
IvorySQL2 小时前
灾难恢复工具内核细节探究与分享
数据库·postgresql·开源
lypzcgf2 小时前
商城小程序数据库表结构文档
数据库·小程序·电商
jjw_zyfx3 小时前
Ubuntu上vue3 vite使用MBTiles搭建地图服务器
服务器·数据库·ubuntu