EXPLAIN  + SQL查询语句

比如:EXPLAIN   select * from user;

来源

表单输入或者url传参

常见攻击方式

  • 使用';--
SELECT * FROM  adv where title='zhangsan';DROP TABLE article--'

引号和分号是为了隔离前面的sql语句,后面的--代表注释。因为最后一个'可能会影响删表,所以使用注释不影响执行删表。注意:最后一个引号来自代码封装:原语句可能如下的写法:


$sql = "SELECT * FROM  adv where title='".$_GET['title']."'";
#这句php代码因为title本身是被引号的
  • 使用 ';' +or + --
SELECT * FROM  adv where title='zhangsan' or DROP TABLE article--'

注意:在PHP中的 mysql_query() 是不允许执行多个SQL语句的,但是还是可以通过or and 等语句来执行。

预防sql注入

  • 开启php魔术模式,magic_quotes_gpc=on;
  • 打开php.ini中的安全模式 safe_mode = on
  • 关闭危险函数,比如system,chmod等函数;
  • 错误信息控制 ,让非开发人员看到有关数据库错误信息是很危险的,这会泄露数据库,表,字段等名称信息以及其他不安全因素。
  • 使用php自带函数将一些特殊字符转义后再执行sql语句:
    • addslashes() 是强行加\;
    • mysql_real_escape_string() 会判断字符集,但是对PHP版本有要求;
    • mysql_escape_string不考虑连接的当前字符集。


基本表是本身独立存在的表,在 SQL 中一个关系就对应一个表。

索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。

缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。

数据库存储过程是一种数据库应用程序,它使用一组特定的SQL语句来操作数据库中的数据。存储过程可以用来提高数据库的性能,提供可重复使用的功能,以及提高数据库的安全性。

优点:

1.可以提高数据库的性能:存储过程可以提高数据库的性能,因为它可以将一组SQL语句封装为一个单独的过程,而不是每次执行SQL语句时都要重新编译它们。

2.可重复使用:存储过程可以被多次使用,这样可以节省开发时间,减少重复代码。

3.提高安全性:存储过程可以提高数据库的安全性,因为它可以限制用户对数据库的访问,同时也可以防止用户误操作数据库。

数据库视图是一种特殊的虚拟表,它的内容来自一个或多个表,可以把多个表的数据组合在一起,以便简化查询。

游标是一种用于遍历数据集的特殊对象,它可以用来查询特定的行,更新特定的行,或者删除特定的行。它可以用来检索数据库中的数据,并在过程中控制行的处理方式,一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

视图的优点:

(1) 视图能够简化用户的操作

(2) 视图使用户能以多种角度看待同一数据;

(3) 视图为数据库提供了一定程度的逻辑独立性;

(4) 视图能够对机密数据提供安全保护。

数据库锁是一种机制,用于在多个用户或程序之间共享数据库资源时,保护数据的完整性和一致性。它可以防止多个用户同时修改同一份数据,从而避免数据混乱。

数据库锁可以分为表锁、行锁和页锁:

  • 表锁是对整个表施加的锁,可以防止其他用户对表进行读写操作;
  • 行锁是对特定行施加的锁,可以防止其他用户对该行进行读写操作;
  • 页锁是对特定页施加的锁,可以防止其他用户对该页进行读写操作。

sql包括:数据定义(DDL)、数据操纵(DML)、数据控制(DCL)、数据查询(DQL)四个部分。

数据定义:Create Table,Alter Table,Drop Table, Craete/Drop Index等

数据操纵:Select ,insert,update,delete,

数据控制:grant,revoke

数据查询:select