SQL数据库常见问题解答及万能密码注入原理讲解[图]

Wesley13
• 阅读 531

SQL数据库常见问题解答及万能密码注入原理讲解[图]
【万能密码】的原理
用户进行用户名和密码验证时,网站需要查询数据库。查询数据库就是执行SQL语句。针对此BBS论坛,当用户登录时,后台执行的数据库查询操作(SQL语句)是【Selectuser id,user type,email From users Where user id=’用户名’ And password=’密码’】
由于网站后台在进行数据库查询的时候没有对单引号进行过滤,当输入用户名【admin】和万能密码【2’or’1】时,执行的SQL语句为【Select user id,user type,email From users Whereuser id=’ admin’ And password=’ 2’or1】。同时,由于SQL语句中逻辑运算符具有优先级,【=】 优先于【and】,【and】 优先于【or】,且适用传递性。因此,此SQL语句在后台解析时,分成两句【Select user id,user type,emall From users Where user id=’ admin Andpassword=’2’ 】和【’1’ 】 两句bool值进行逻辑on运算,恒为TRUE。SQL语句的查询结果为TRUE,就意味着认证成功,也可以登录到系统中。
1.数据库索引失效的场景:
应尽量避免在 where 子句中使用 != 或 <> 操作符,否则引擎将放弃使用索引而进行全表扫描;
尽量避免在 where 子句中使用 or 来连接条件
如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不会使用索引;
like的模糊查询以 % 开头,索引失效;
应尽量避免在 where 子句中对字段进行表达式操作
应尽量避免在 where 子句中对字段进行函数操作
不要在 where 子句中的 “=” 左边进行函数、算术运算或其他表达式运算
不适合键值较少的列(重复数据较多的列)
不符合最左前缀匹配原则(设置了索引A、B、C,然后查找的时候使用索引B、C)

SQL数据库常见问题解答及万能密码注入原理讲解[图]

2.使用存储过程的优缺点:
优点:(1)存储过程在第一次使用的时候就进行编译,以后每次使用都不需要重新编译,可以提高数据库的执行速度(2)代码复用性,可以重复使用(3)当对数据库进行复杂操作的时候,可将这些复杂操作用存储过程封装起来,避免进行一条条的sql语句操作,只需要连接一次数据库则可以了
缺点:(1)不便于调试(2)没办法使用缓存
3.为什么MySQL数据库索引选择使用B+树?
二叉树的查找速度较快,取决于树的高度,但由于数据库索引存放在磁盘上,当数据量比较大的时候,当我们利用索引查询的时候,不能把索引全部加载到内存中,能做的就是逐一加载每一个磁盘页,这里的磁盘页对应着索引树的节点,所以应当减少磁盘IO次数。所以B-树(平衡的多路查找树)正可以解决这个问题,虽然在节点上元素较多,比较的次数较多,但由于节点上的元素是加载到内存中进行比较的,速度比较快。
4.B+树相对B-树的优势:
磁盘IO次数更少(B+树非叶子节点上存放key值,不存放data,相比B-树,相同节点能够存放更多的data,也就是说,相同节点的话,B+树的高度可能比B-树低------>针对节点数比较多的情况)
查询性能更加稳定(B+树必须从根节点到叶子节点这条路径,才能找到所需的数据;而B-树可能在非叶子节点上就找到所需的数据)
范围查询更加简便(B+树的叶子节点采用一种 顺序指针,只需要遍历一遍,则可以找到所有的数据,并且查找一定范围内的值也很方便)
5.MySQL日志文件分类
错误日志:记录mysql启动、运行或者关闭时出现错误的信息
查询日志:记录所有对数据库的操作,包括增删查改
二进制日志:记录修改数据或者引起mysql数据变化的sql语句
慢查询日志:记录查询时间超过指定阈值的查询语句
6.MySQL存储引擎MyISAM与InnoDB区别
每个MyISAM在磁盘上存储成三个文件。第一个 文件的名字以表的名字开始,扩展名指出文件类型。
.frm文件存储表定义;.MYD (MYData)存储数据;.MYI (MYIndex)存储索引;
基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的 大小只受限于操作系统文件的大小,一般为 2GB
事务:InnoDB支持事务,MyIsam不支持事务
外键:InnoDB支持外键,MyIsam不支持外键
锁:MyIsam只支持表级锁;InnoDB支持表级锁和行级锁,并且支持MVCC(多版本并发控制)来提高并发的性能(多版本只是解决不可重复读问题,巴黎圣母院读书笔记心得感悟,而加上间隙锁(也就是它这里所谓的并发控制)才解决了幻读问题),自身也做了一些优化,比如:建立自适应索引,加快查询速度;采用可预测性读磁盘数据;增加了加快插入操作的插入缓冲区
索引:InnoDB的主索引采用的是聚集索引,也就是将数据放在索引上;MyIsam的索引采用的是非聚集索引,只是讲数据的地址放在索引上
查询:如果需要频繁的查询数据的话,MyIsam的效率比InnoDB高;如果需要经常执行插入、删除等操作的话,则优先选择InnoDB
查询行数:select count(*) from table --->MyIsam内部保存了行数,可以直接拿到行数,而InnoDB则需要扫描全表;如果查询语句里面包含where条件的话,则两个存储引擎的效率一样,都需要扫描全表

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Easter79 Easter79
3年前
sql注入
反引号是个比较特别的字符,下面记录下怎么利用0x00SQL注入反引号可利用在分隔符及注释作用,不过使用范围只于表名、数据库名、字段名、起别名这些场景,下面具体说下1)表名payload:select\from\users\whereuser\_id1limit0,1;!(https://o
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这