可以这样输入实现免帐号登录:
用户名: ‘or 1 = 1 --
密 码:
从理论上说,后台认证程序中会有如下的SQL语句:
String sql = "select * from user_table where username=
' "+userName+" ' and password=' "+password+" '";
当输入了上面的用户名和密码,上面的SQL语句变成:
SELECT * FROM user_table WHERE username=
'’or 1 = 1 -- and password='’
解决数据库阻塞问题
Lock_TIMEOUT 选项
(1)设置会话等待锁释放的超时期限
(2)默认情况下会话不会设置等待锁释放的超时期限
(3)设置会话超时期限为5秒, SET Lock_TIMEOUT 5000
(4)锁定如果超时,不会引发事务回滚
(5)取消会话超时锁定的设置,SET LOCK_TIMEOUT -1
如果超时,将显示以下错误:
KILL命令
(1)杀掉会话52,KILL 52
(2)杀掉会话,会引起事务回滚,同时释放排他锁
https://blog.csdn.net/bjddd192/article/details/2039186
spring 如何保证数据库事务在同一个连接下执行的?
调用getConnection()的时候从数据库连接池中获取一个connection, 然后将其与ThreadLocal绑定, 事务完成后解除绑定。这样就保证了事务在同一连接下完成。
MySQL 日志主要包括「错误日志」、「查询日志」、「慢查询日志」、「二进制日志(binlog)」 和 事务日志(redo log、undo log)几大类
- Binlog 是逻辑日记,用于记录数据库执行的写入操作(查询不记录)信息。可以简单理解为记录的是sql语句。
- 在实际应用中,Binlog 主要用在两个场景:主从复制和数据恢复
1.主从复制场景:在 Master 主端开启 Binlog,将 Binlog 发生到各个 Slave 从端,Slave 从端重放 Binlog 从而达到主从数据一致
2.数据恢复场景:通过使用 mysqlbinlog 工具来恢复数据 - Undo log是 逻辑日记 、回滚日记。比如一条修改 +3 的逻辑语句,Undo log 会记录对应一条 -3 的逻辑日记,一条插入语句则会记录一条删除语句,这样发生错误时,根据执行 Undo log 就可以回滚到事务之前的数据状态。
- Redo log 是重做日记,属于InnoDB引擎的日记。是物理日记,日记记录的内容的是数据页的更改,这个页 “做了什么改动”。如:add xx记录 to Page1,向数据页Page1增加一个记录。
- Redo log 容灾恢复过程
1.判断 redo log 是否完整,如果判断是完整(commit)的,直接用 Redo log 恢复
2.如果 redo log 只是预提交 prepare 但不是 commit 状态,这个时候就会去判断 binlog 是否完整,如果完整就提交 Redo log,用 Redo log 恢复,不完整就回滚事务,丢弃数据。












网友评论