当前位置: 首页 > article >正文

【MySQL】视图与用户管理——MySQL

W...Y的主页 😊

代码仓库分享 💕 

 


目录

视图

基本使用

视图规则和限制

用户管理

 用户

用户信息 

创建用户

删除用户

修改用户密码

 数据库的权限

给用户授权

回收权限


视图

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

基本使用

创建视图

create view 视图名 as select语句;

 案例

create view v_ename_dname as select ename, dname
from EMP, DEPT where EMP.deptno=DEPT.deptno;
select * from v_ename_dname order by dname;
+--------+------------+
| ename | dname   |
+--------+------------+
| CLARK | ACCOUNTING |
| KING  | ACCOUNTING |
| MILLER | ACCOUNTING |
| SMITH | RESEARCH  |
| JONES | RESEARCH  |
| SCOTT | RESEARCH  |
| ADAMS | RESEARCH  |
| FORD  | RESEARCH  |
| ALLEN | SALES   |
| WARD  | SALES   |
| MARTIN | SALES   |
| BLAKE | SALES   |
| TURNER | SALES   |
| JAMES | SALES   |
+--------+------------+

 修改了视图,对基表数据有影响

select emp.ename,dept.dname,dept.deptno from emp,dept where
emp.deptno=dept.deptno order by dname;
update v_ename_dname set ename='TEST'  where ename='CLARK';
select * from EMP  where ename='CLARK';
select * from EMP  where ename='TEST';

修改了基表,对视图有影响

mysql> update EMP set deptno=10 where ename='JAMES'; -- 修改基表
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from v_ename_dname where ename='JAMES';
+-------+----------+
| ename | dname  |
+-------+----------+
| JAMES | RESEARCH | <== 视图中的数据也发生了变化
+-------+----------+

删除视图

drop view 视图名;

视图规则和限制

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

用户管理

如果我们只能使用root用户,这样存在安全隐患。这时,就需要使用MySQL的用户管理。

 用户

用户信息 

MySQL中的用户,都存储在系统数据库mysql的user表中

mysql> use mysql;
Database changed
mysql> select host,user,authentication_string from user;
+-----------+---------------+-------------------------------------------+
| host   | user     | authentication_string           |
+-----------+---------------+-------------------------------------------+
| localhost | root     | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | mysql.sys   | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+-----------+---------------+-------------------------------------------+
--可以通过desc user初步查看一下表结构

字段解释:

host: 表示这个用户可以从哪个主机登陆,如果是localhost,表示只能从本机登陆
user: 用户名
authentication_string: 用户密码通过password函数加密后的
*_priv: 用户拥有的权限

创建用户

语法:

create user '用户名'@'登陆主机/ip' identified by '密码';

案例:

mysql> create user 'whb'@'localhost' identified by '12345678';
Query OK, 0 rows affected (0.06 sec)
mysql> select user,host,authentication_string from user;
+---------------+-----------+-------------------------------------------+
| user     | host   | authentication_string           |
+---------------+-----------+-------------------------------------------+
| root     | %     | *A2F7C9D334175DE9AF4DB4F5473E0BD0F5FA9E75 |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys   | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| whb      | localhost | *84AAC12F54AB666ECFC2A83C676908C8BBC381B1 | --新增用
户
+---------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)
-- 此时便可以使用新账号新密码进行登陆啦
--备注:可能实际在设置密码的时候,因为mysql本身的认证等级比较高,一些简单的密码无法设置,会爆出
如下报错:
-- ERROR 1819 (HY000): Your password does not satisfy the current policy
requirements
-- 解决方案:https://blog.csdn.net/zhanaolu4821/article/details/93622812
--查看密码设置相关要求:SHOW VARIABLES LIKE 'validate_password%';
-- 这个大家下来自己玩玩
--关于新增用户这里,需要大家注意,不要轻易添加一个可以从任意地方登陆的user。

删除用户

语法:

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

示例:

mysql> select user,host,authentication_string from user;
+---------------+-----------+-------------------------------------------+
| user     | host   | authentication_string           |
+---------------+-----------+-------------------------------------------+
| root     | %     | *A2F7C9D334175DE9AF4DB4F5473E0BD0F5FA9E75 |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys   | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| whb      | localhost | *84AAC12F54AB666ECFC2A83C676908C8BBC381B1 |
+---------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)
mysql> drop user whb;        --尝试删除
ERROR 1396 (HY000): Operation DROP USER failed for 'whb'@'%' -- <= 直接给个用户名,
不能删除,它默认是%,表示所有地方可以登陆的用户
mysql> drop user 'whb'@'localhost'; --删除用户
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host,authentication_string from user;
+---------------+-----------+-------------------------------------------+
| user     | host   | authentication_string           |
+---------------+-----------+-------------------------------------------+
| root     | %     | *A2F7C9D334175DE9AF4DB4F5473E0BD0F5FA9E75 |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys   | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+---------------+-----------+-------------------------------------------+
3 rows in set (0.00 sec)

修改用户密码

语法:

自己改自己密码

set password=password('新的密码');
--自己下来试试


root用户修改指定用户的密码

set password for '用户名'@'主机名'=password('新的密码');

 数据库的权限

MySQL数据库提供的权限列表:

给用户授权

刚创建的用户没有任何权限。需要给用户授权。
语法:

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

 说明:
权限列表,多个权限用逗号分开

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

*.* : 代表本系统中的所有数据库的所有对象(表,视图,存储过程等)
库.* : 表示某个数据库中的所有数据对象(表,视图,存储过程等)
identified by可选。 如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户

注意:如果发现赋权限后,没有生效,执行如下指令:flush privileges; 

回收权限

语法:

revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置'; 

示例:

-- 回收whb对test数据库的所有权限
--root身份,终端A
mysql> revoke all on test.* from 'whb'@'localhost';
Query OK, 0 rows affected (0.00 sec)
--whb身份,终端B
mysql> show databases;
+--------------------+
| Database      |
+--------------------+
| information_schema |
| test        |
+--------------------+
2 rows in set (0.00 sec)
mysql> show databases;
+--------------------+
| Database      |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.00 sec)

 


http://www.kler.cn/a/369120.html

相关文章:

  • STL-常用容器-list
  • Vue 3 的组件式开发(1)
  • 小知识点的回顾
  • 2-解决联想拯救者Y7000p在ubuntu20.04未找到wifi适配器,安装rtl8852ce网卡驱动问题
  • 高效网络自动化:Python在网络基础中的应用
  • Python酷库之旅-第三方库Pandas(170)
  • 华为交换机堆叠
  • 情感咨询小程序的市场需求大吗?
  • 公域电商云分账系统:资金流转的智慧
  • Linux: Shell编程中的应用之基于sh脚本生成网页
  • windows查端口是哪个进程开的
  • 关于SpringMVC项目
  • vue 解决:npm ERR! code ERESOLVE 及 npm ERR! ERESOLVE could not resolve 的方案
  • 谷歌仓库管理工具repo
  • 基于Matlab 疲劳检测系统
  • 一个临床数据收集/调查问卷APP模板(streamlit+MongoDB)
  • django celery 定时任务 Crontab 计划格式
  • 无线麦克风方案芯片DSH32F3024
  • OpenCV ORB角点检测匹配和偏移计算
  • QT 机器视觉 1.相机类型
  • springboot集成camunda学习与使用
  • 微信小程序 - 图像加载时渐隐淡入效果 image,实现渐入渐出动画效果,微信小程序实现图片加载淡入淡出效果,图像加载时的渐隐淡入效果!
  • 全网最简单的Java设计模式【九】原型模式深入解析
  • 深入分析梧桐数据库SQL查询之挖掘季度销售冠军
  • 安卓14上蓝牙调用SystemProperties.set(),解决找不到SystemProperties.set()的问题
  • Ubuntu 2张4090,显卡安装,无法双屏显示