SQL 注入
SQL注入就不用介绍了,网上很多。下面介绍一下防止
SQL注入的方法。
使用
quotename 函数和
sp_executesql
参考如
下表结构:这是一个文档表里面有一些简单的字段信息
CREATE
TABLE
[dbo]
.
[DocumentInfo]
(
[ID]
[int]
IDENTITY
(
1,
1) primary key
NOT
NULL,--
主键
[Name]
[varchar]
(
100)
NOT
NULL,--
文档名字
[FunctionID]
[int]
NOT
NULL
,
--
功能
ID
外键
[TypeInfo]
[nvarchar]
(
2000)
NULL—
描述信息
)
我们可能会按,主键
ID,文档的名字,功能
id,
描述信息进行查询
,这个一看就是拼接
sql语句,如果不用上面的方法很可能造成
sql注入
例如你写的存储过程可能如下:
CREATE
proc
[dbo]
.
[Doc_search]
(
@ID
int
,
@name
varchar
(
10),
@FID
int
,
@Info
nvarchar
(
20)
)
as
begin
declare
@sql
varchar
(
300)
set
@sql
=
'select * from
[DocumentInfo] where 1=1'
if
@ID
<>-
1
set
@sql
=
@sql
+
' and ID='
+
CAST
(
@ID
as
varchar
)
if
@name
<>
''
set
@sql
=
@sql
+
' and name='''
+
CAST
(
@name
as
varchar
)
+
''''
if
@FID
<>-
1
set
@sql
=
@sql
+
' and
[FunctionID]='
+
CAST
(
@FID
as
varchar
)
if
@Info
<>
''
set
@sql
=
@sql
+
' and [TypeInfo] like ''%'
+
CAST
(
@Info
as
varchar
)+
'%'''
print
@sql
end
exec
(
@sql
)
虽然你用了带参数的存储过程
,但本质上还是拼接字符串,没有有效的防治
sql注入。现在
分别用
quotename()函数和
sp_executesql。
Quotename()函数不知道用的请自行查找,
sp_executesql的用法
见上一篇动态
sql
Quotename改进如下:
alter
proc
[dbo]
.
[Doc_search]
(
@ID
int
,
@name
varchar
(
10),
@FID
int
,
@Info
nvarchar
(
20)
)
as
begin
declare
@sql
varchar
(
300)
set
@sql
=
'select * from
[DocumentInfo] where 1=1'
if
@ID
<>-
1
set
@sql
=
@sql
+
' and ID='
+
CAST
(
@ID
as
varchar
)
相关文档:
--SQL Server:
Select TOP N * from TABLE Order By NewID()
--Access:
Select TOP N * from TABLE Order By Rnd(ID)
Rnd(ID) 其中的ID是自动编号字段,可以利用其他任何数值来完成,比如用姓名字段(U ......
今天在登录sql2005的时候,想用sa的验证方式登录,发现登录不了,在网上查了下,按照下面的就可以解决。之前在装sql2005的时候,是设置成windows验证方式登录的。
具体解决方案如下:
1. 开启sql2005远程连接功能,开启办法如下,
配置工具->sql server外围应用配置器->服务和连接的 ......
今天用time Like '2008-06-01%'语句来查询该天的所有数据,被提示语句错误。查了一下才发现该模糊查询只能用于String类型的字段。
自己也查阅了一些资料。关于时间的模糊查询有以下三种方法:
1.Convert转成String,在用Like查询。
select * from table1 where c ......
1、简单查询
求出在1988年以前被雇佣的销售人员
SELECT NAME
from SALESREPS
WHERE HIRE_DATE<'01-JAN-88'
列出其销售量低于销售目标的80%的销售点
SELECT CITY,SALES,TAGET
from SALESPEPS
WHERE SALES<0.8*TAGET ......
PL/SQL最差实践
http://benben.javaeye.com/blog/278164
1. 超长的PL/SQL代码
影响:可维护性,性能
症状:
在复 ......