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
 ......