公司DBA不允许创建的存储过程中有拼接SQL语句的行为,请问,该怎么解决?说是这样做有风险,说我非要用的话,可以签一份风险协议,出了问题我负责之类的。请问:各位在多条件查询这种情况下,存储过程都是怎么写的?有不拼接又省事的办法吗?另外,这个风险难道微软没有提供解决方案吗?
8条回答 默认 最新
- 吉普赛的歌 2015-05-26 14:22关注
真正的风险, 不在于拼SQL, 而是输入值没有参数化。
比如:
delare @sql nvarchar(max), @name nvarchar(20)
set @name='小明'
set @sql = 'select * from user where username like ''%'+@name+'%'''
--下面有风险
exec (@sql)
--下面这种无风险
set @sql = 'select * from user where username like ''%@name%'''
exec sp_executesql
@stmt=@sql,
@params =N'@name as nvarchar(20)',
@name=@name其实道理很简单, 如果都是sqlserver内部、数据库内部、你自己写的东西 比如 select , from , where 之类的肯定没有问题, 不用怕。
怕的是什么呢?怕的是外部传过来的东西——比如上面的@name, 这个是从网站的页面传过来的, 如果不用参数化, 绝对有sql注入风险!如果你还有疑问, 可以列出具体的例子来, 我可以为你尽力解答!
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 求差集那个函数有问题,有无佬可以解决
- ¥15 【提问】基于Invest的水源涵养
- ¥20 微信网友居然可以通过vx号找到我绑的手机号
- ¥15 寻一个支付宝扫码远程授权登录的软件助手app
- ¥15 解riccati方程组
- ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
- ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
- ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
- ¥50 树莓派安卓APK系统签名
- ¥65 汇编语言除法溢出问题