Anarckk
转载:https://www.cnblogs.com/loveyoulx/p/9526068.html
SQL注入本质上,是程序将用户输入的参数当成命令的一部分进行解析,从而使用户可以自由搜索我们的数据库中的记录。
解决方法,是将用户输入的内容进行解析和转义,将用户输入内容中的恶意代码转为普通字符串,从而保护数据库不被攻击。
SQL注入攻击,简称SQL攻击或注入攻击,是发生于应用程序之数据库层的安全漏洞。简而言之,是在输入的字符串之中注入SQL指令,在设计不良的程序当中忽略了检查,那么这些注入进去的指令就会被数据库服务器误认为是正常的SQL指令而运行,因此遭到破坏或是入侵。
最常见的就是我们在应用程序中使用字符串联结方式组合 SQL 指令,有心之人就会写一些特殊的符号,恶意篡改原本的 SQL 语法的作用,达到注入攻击的目的。
举个栗子:
比如验证用户登录需要 username 和 password,编写的 SQL 语句如下:
1 | String querySql = "select * from user where (name = '"+ username +"') and (pw = '"+ password +"');"; |
username 和 password 字段被恶意填入
1 | username = "1' OR '1'='1"; |
与
1 | password = "1' OR '1'='1"; |
将导致原本的 SQL 字符串被填为:
1 | select * from user where (name = '1' or '1'='1') and (pw = '1' or '1'='1'); |
实际上运行的 SQL 语句将变成:
1 | select * from user; |
也就是不再需要 username 和 password 账密即达到登录的目的,结果不言而喻。
1 | # Properties file with JDBC-related settings. |
查询数据库中最新的一条记录
1 | SELECT id FROM affair ORDER BY create_time DESC LIMIT 0,1; |
删除这条最新的记录
1 | DELETE a FROM affair a,(SELECT id FROM affair b ORDER BY b.create_time DESC LIMIT 0,1) b WHERE a.id = b.id; |
DELETE a 指的是后面 affair a,子select查询结果重命名为b了。
MySQL的varchar定义长度到底是字节
varchar存储规则:
4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)
5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节
Mysql4中最大也不过是20个字节,但是Mysql5根据编码不同,存储大小也不同。
阅读原文请点击:http://click.aliyun.com/m/23921/
摘要: mysql的联合主键:用2个字段(或者多个字段,后面具体都是用2个字段组合)来确定一条记录,说明,这2个字段都不是唯一的,2个字段可以分别重复,这么设置的好处,可以很直观的看到某个重复字段的记录条数。
mysql的联合主键:用2个字段(或者多个字段,后面具体都是用2个字段组合)来确定一条记录,说明,这2个字段都不是唯一的,2个字段可以分别重复,这么设置的好处,可以很直观的看到某个重复字段的记录条数。
在mysql当中我们经常认为主键只能设置一个,那如果我们想设置两个呢?如下图:
1 | CREATE TABLE `test` ( |