摇曳的风筝 2015-05-19 08:53 采纳率: 50%
浏览 2080
已采纳

存储过程不让拼接SQL语句

公司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注入风险!

    sql注入

    如果你还有疑问, 可以列出具体的例子来, 我可以为你尽力解答!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题