程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> mssql-存儲過程不讓拼接SQL語句

mssql-存儲過程不讓拼接SQL語句

編輯:編程綜合問答
存儲過程不讓拼接SQL語句

公司DBA不允許創建的存儲過程中有拼接SQL語句的行為,請問,該怎麼解決?說是這樣做有風險,說我非要用的話,可以簽一份風險協議,出了問題我負責之類的。請問:各位在多條件查詢這種情況下,存儲過程都是怎麼寫的?有不拼接又省事的辦法嗎?另外,這個風險難道微軟沒有提供解決方案嗎?

最佳回答:


真正的風險, 不在於拼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注入

如果你還有疑問, 可以列出具體的例子來, 我可以為你盡力解答!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved