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

【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.lryc.cn/news/468348.html

相关文章:

  • Go语言中三个输入函数(scanf,scan,scanln)的区别
  • uniapp使用html2canvas时,页面内的image元素模糊
  • 华为交换机堆叠
  • Spring Boot框架下中小企业设备管理系统开发
  • 鸿蒙开发融云demo消息未读数
  • 非对称加密算法(RSA):原理、应用与代码实现
  • docker部署SQL审核平台Archery
  • ceph 删除rbd 锁的命令
  • MySQL【知识改变命运】01
  • 苍穹外卖 Maven依赖配置
  • Lucas带你手撕机器学习——SVM支持向量机
  • 将后端返回的网络url转成blob对象,实现pdf预览
  • 民峰金融智能交易模型的应用与未来趋势
  • 文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑负荷时空迁移的5G基站与配电网协同优化运行 》
  • 数据结构中的堆(Heap)
  • Linux误删文件找回
  • 深入计算机语言之C++:类与对象(中)
  • 51单片机快速入门之 IIC I2C通信
  • 腾讯推出ima.copilot智能工作台产品 由混元大模型提供技术支持
  • 1024是什么日子
  • 驱动开发系列20 - Linux Graphics Xorg-server 介绍
  • 晶台推出SOP5封装的高速光耦KLM45X,提供1MBit/s超快速率
  • 软物质流变探究:从宏观微观差异,到水凝胶界面特性
  • Axure中继器单选、多选和重置
  • 微软公司用没有使用证据的商标申请驰名商标,该怎么维权?
  • 学习分布式系统我来助你!【基本知识、基础理论、设计模式、应用场景、工程应用、缓存等全包含!】
  • ubuntu查看系统版本命令
  • 使用yield压平嵌套字典有多简单?
  • express中使用morgan打印请求数据日志文件,按日期分割
  • 干货 | 2024 AI+智慧城市安全解决方案白皮书(免费下载)