SQL注入简单分析
示例语句:
select * from admintable where adminName like '%a%'
在查询中我们一般在a这个地方由界面传入不同的值,当我们在a这里传入的值为“'”单引号时,拼凑成的SQL语句就如下:
select * from admintable where adminName like '%'%'
执行这句语句我们会发现出现以下异常:
消息 105,级别 15,状态 1,第 1 行
字符串 '
' 后的引号不完整。
消息 102,级别 15,状态 1,第 1 行
'
' 附近有语法错误。
因为单引号的加入是原本完整的SQL语句拼凑不再完整,因此导致以上异常。
而一般黑客在简单的尝试注入时,在界面的输入处(如URL的参数,文本框的输入等)直接输入单引号来测试是否会引发SQL异常,根据页面的错误代码展现来判断是否存在SQL注入漏洞,例如会直接在页面中出现SQL的异常代码或直接跳转到错误页面。当被认为存在SQL注入漏洞时,那么将不再是输入单引号了,而是输入相关的SQL执行语句。
于是当我们传入不同的值例如
' or 1=1 ;delete admintable where 1=1 or ''='
得到的SQL语句就如下:
select * from admintable where adminName like '%' or 1=1 ;delete admintable where 1=1 or ......
今天我们开始SQL SERVER BI的另外一个重要的部分 --Reporting Service,相对于Integration Service和Analysis Service,Reporing Service在国内的使用者应该多很多.一方面由于Reporing Service费用比较低,直接附属在SQL SERVER中,另外一方面其实SSRS在很大程度上还是满足我们的报表需求的。 在SQL Server 2008中,SSRS更是在很多方面都有所加强,”如果微软在2008的BI中投入了10美元,那边其中的8美元都投入到了Reporing Servce中”.我们就来大概看一下,SSRS 2008提供了哪些新的特性和改变:
1.脱离了IIS
SSRS 2008不再依赖IIS,其内置了处理用户请求的功能。当启动SSRS时,可以直接访问Reports和ReportServer,并且安全性和性能增强。有很多朋友反应的体会就是,”使用了SSRS 2008以后,不能够实现匿名访问报表了?”
2.新增导出到Word选项,导出CSV增强
在以前的导出XML,Pdf ,Excel等格式的基础上,添加了众望所归的导出Word格式文件的支持。另外导出CSV格式数据功能增强。
&n ......
2008的SSMS比2005版要多消耗一倍左右的内存,而且似乎不会自己释放,至少也是内存管理不是很合理,往往打开几个查询窗口进行查询后内存就会升到难以200MB到300MB,且关掉后内存不会释放,而2005的SSMS一般只是在100MB左右。对拥有大内存的电脑来说这可能不算什么,但对内存只有1G或更少的用户来说,这几乎是不可容忍的,因为使用SSMS的同时一般还会打开如浏览器,开发工具等多个消耗内存的大户。
也许这是因为SSMS2008加入了诸多新功能,但是无论如何这样的软件使用起来很难让人觉得舒服。 ......
今天给大家分享一下如何备份和回复sql server 数据,
首先确保你具有DB的最高权限
在JAVA代码中 你可以这样写public class Opp extends TestCase{
public void test1()
{
try
{
Connection con = DBUtils.getConn();
String sql="backup database tdzl to disk='d:\\tdzl.bak'";
Statement st = con.createStatement();
st=con.createStatement();
st.execute(sql);
}catch(Exception e)
{
e.printStackTrace();
}
}
}
在MASTER数据库中创建两个存储过程
p1
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[killspid] (@dbname varchar(20))
as
begin
declare @sql nvarchar(500)
declare @spid int
set @sql='declare getspid cursor for select spid from sysprocesses where dbid=db_id('''+@dbname+''')'
exec (@sql)
open getspid
fetch next from getspid into @spid
while @@fetch_status <> -1
begin
exec('kill '+@spid)
fetch next from getspid into @spid
e ......
今天给大家分享一下如何备份和回复sql server 数据,
首先确保你具有DB的最高权限
在JAVA代码中 你可以这样写public class Opp extends TestCase{
public void test1()
{
try
{
Connection con = DBUtils.getConn();
String sql="backup database tdzl to disk='d:\\tdzl.bak'";
Statement st = con.createStatement();
st=con.createStatement();
st.execute(sql);
}catch(Exception e)
{
e.printStackTrace();
}
}
}
在MASTER数据库中创建两个存储过程
p1
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[killspid] (@dbname varchar(20))
as
begin
declare @sql nvarchar(500)
declare @spid int
set @sql='declare getspid cursor for select spid from sysprocesses where dbid=db_id('''+@dbname+''')'
exec (@sql)
open getspid
fetch next from getspid into @spid
while @@fetch_status <> -1
begin
exec('kill '+@spid)
fetch next from getspid into @spid
e ......
在使用ODP.NET进行Oracle编程时,有时候SQL语句非常复杂,需要采用动态构造查询语句的情况,有两种方法可以构造动态的SQL语句,并执行返回结果集。
1、在数据访问层构造SQL语句
例如下面的语句,将构造完整的SQL语句赋值给CommandText,再传递到数据库进行执行,返回结果集。
loadCommand.CommandType = CommandType.Text
loadCommand.CommandText = "Select * from Users"
dataAdapter .SelectCommand = loadCommand
dataAdapter . Fill(data)
dataAdapter .SelectCommand = loadCommand
dataAdapter . Fill(data)
该方法需要将整个SQL的构造过程放在DataAccess层,业务逻辑发生变化,修改不方便,而且每次查询需要传递给数据库很长的查询字符串,传递参数的效率也不高。
2、在存储过程中构造动态SQL语句并执行
以下为一个完整的事例(经过删减),其中RefCursor 为自定义游标类型
PROCEDURE G_Search(P_YearNO IN NUMBER,
& ......
在使用ODP.NET进行Oracle编程时,有时候SQL语句非常复杂,需要采用动态构造查询语句的情况,有两种方法可以构造动态的SQL语句,并执行返回结果集。
1、在数据访问层构造SQL语句
例如下面的语句,将构造完整的SQL语句赋值给CommandText,再传递到数据库进行执行,返回结果集。
loadCommand.CommandType = CommandType.Text
loadCommand.CommandText = "Select * from Users"
dataAdapter .SelectCommand = loadCommand
dataAdapter . Fill(data)
dataAdapter .SelectCommand = loadCommand
dataAdapter . Fill(data)
该方法需要将整个SQL的构造过程放在DataAccess层,业务逻辑发生变化,修改不方便,而且每次查询需要传递给数据库很长的查询字符串,传递参数的效率也不高。
2、在存储过程中构造动态SQL语句并执行
以下为一个完整的事例(经过删减),其中RefCursor 为自定义游标类型
PROCEDURE G_Search(P_YearNO IN NUMBER,
& ......
BUILTIN\Administrators
-- 这个是Admin组的权限,默认情况下本地Admin都隶属于这个组,具有比较大的权限,
-- 作为Windows集成登录,如果使用的是管理员,就会使用到它,
HC811\ASPNET
-- 这个是ASPNET应用的访问帐号组,
HC811\SQLServer2005MSFTEUser$HC811$MSSQLSERVER
-- 这个是全文索引的访问帐号组
HC811\SQLServer2005MSSQLUser$HC811$MSSQLSERVER
-- 这个是通常的用户访问帐号组
HC811\SQLServer2005SQLAgentUser$HC811$MSSQLSERVER
-- 这个是Agent用户访问的帐号组
NT AUTHORITY\SYSTEM
-- 这个是NT授权帐号组
sa
-- 这个是超级用户,就不用说了吧
对应的权限在MSDN上有详细的说明,自己看看,
要看你的数据库的应用,所以使用哪些权限和哪些登录组.
参考:
设置 Windows 服务帐户
http://technet.microsoft.com/zh-cn/library/ms143504.aspx
......