数据库编程源码分析

数据库编程源码分析

环境:SQL SERVER 2008,window10系统

一、搭建环境运行JAVA学生选课管理系统

问题:附加数据库失败

解决方法:进行sqlserver2019的卸载下载sqlserver2008进行实验

收获:sqlserver2019的卸载过程繁琐复杂,软件内附带的文件夹数量极多。

问题:连接数据库失败(能弹出登录界面,但输入用户名密码后显示"无法连接到SQL SERVER)。

解决方法:能弹出登录界面,但输入用户名密码后显示"无法连接到SQL SERVER 检查SQL Server是否在1433端口上监听,并配置Windows防火墙放行该端口,通telnet测试127.0.0.1 1433是否在监听。在 Sql Server 配置管理器中打开 TCP/IP 连接并添加一个 IP 地址为

127.0.0.1 端口设置为 1433。

二、阅读代码,了解前端界面和后端数据库交互过程。

1.采用SQL SERVER 身份验证登录到数据库

2.输入用户名和密码进行身份验证

3.若用户名有空格则重新进行验证,如下:

4.若用户名合格,检查密码正确,若正确则进入系统。如下:

  • 万能密码实现SQL注入

当在登录时输入密码’OR’1’=’1时

以学生为例,代码:

(学号='" + loginUserName + "' AND 密码 ='" + loginPassword + "')变为

(学号='" + loginUserName + "' AND 密码 ='" + loginPassword + ’OR’1’=’1)

此时返回值必为1,实现了登陆成功。

  • 防御万能密码

1. 代码层防止sql注入攻击的最佳方案就是sql预编译

2. 确认每种数据的类型,比如是数字,数据库则必须使用int类型来存储

3. 规定数据长度,能在一定程度上防止sql注入

4. 严格限制数据库权限,能最大程度减少sql注入的危害

5. 避免直接响应一些sql异常信息,sql发生异常后,自定义异常进行响应

6. 过滤参数中含有的一些数据库关键词

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
use master go if exists(select*from sysdatabases where name='bbsDB') drop database bbsDB create database bbsDB on primary ( name='bbsDB_data', filename='D:\project\bbsDB_data.mdf', size=10mb ) log on ( name='bbsDB_log', filename='D:\project\bbsDB_log.ldf', size=10mb ) go use bbsDB go create table bank ( customerName char(8) not null,--顾客姓名 cardID char(10) not null,--卡号 currentMoney Money not null,--当前余额 ) go create table transInfo ( cardID char(10) not null,--卡号 transType char(4) not null,--交易类型 transMoney money not null,--交易金额 transDate datetime not null,--交易时间 ) go alter table bank add constraint ck_currentMoney check(currentMoney>=1) alter table transInfo add constraint df_transDate default(getDate())for transDate,constraint ck_transType check(transType in('存入','支取')) go insert into bank(customerName,cardID,currentMoney)values('张三','100010001',2000) --insert into bank(customerName,cardID,currentMoney)values('李四','100010002',1) print '------取款前的余额------' select*from bank go begin transaction declare @errorSum int declare @myMoney Money set @myMoney=1000 --取款金额 set @errorSum=0 --取款 insert into transInfo(cardID,transType,transMoney)values('100010001','支取', @myMoney) set @errorSum=@errorSum+@@error update bank set currentMoney=currentMoney-@myMoney where cardID='100010001' set @errorSum=@errorSum+@@error print'------取款事务过程中余额和交易信息------' select*from bank select*from transInfo if @errorSum<>0 begin print'交易失败,回滚事务' rollback transaction end else begin print '交易成功,提交事务' commit transaction end go print'-------取款事务结束后的余额和交易信息------' select*from bank select*from transInfo go go begin transaction declare @errorSum int declare @myMoney Money set @myMoney=5000 --存入金额 set @errorSum=0 --存入 insert into transInfo(cardID,transType,transMoney)values('100010001','存入',@myMoney) set @errorSum=@errorSum+@@error update bank set currentMoney=currentMoney+@myMoney where cardID='100010001' set @errorSum=@errorSum+@@error print'------存款事务过程中余额和交易信息------' select*from bank select*from transInfo if @errorSum<>0 begin print'交易失败,回滚事务' rollback transaction end else begin print '交易成功,提交事务' commit transaction end go print'-------存款事务结束后的余额和交易信息------' select*from bank select*from transInfo go

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值