快捷搜索:

SQL Server 2008中的代码安全(一):存储过程加密

近来对SQL Server 2008的安然入门略作小结,以作备忘。本文涉及两个利用:存储历程加密和安然高低文。

存储历程加密

着实,用了这十多年的SQL server,我已经成了存储历程的忠厚拥趸。在直接应用SQL语句照样存储历程来处置惩罚营业逻辑时,我基础会绝不踌躇地选择后者。

来由如下:

1、应用存储历程,至少在防不法注入(inject)方面供给更好的保护。至少,存储历程在履行前,首先会履行预编译,(假如因为不法参数的缘故原由)编译掉足则不会履行,这在某种程度上供给一层天然的屏蔽。

我至今还记得大年夜约八、九年前采纳的一个权限节制系统便是经由过程拼凑一个SQL语句,终极获得了一个形如“ where 1=1 and dataID in (1,2) and ModelID in (2,455) And ShopID in (111) and departID in ( 1,3) and ([Name] like %myword%) ”的where前提子句来获取相符前提的结果集。

留意:这个参数是经由过程地址栏web利用的地址栏或Winform的UI界面来输入的,以是对恶意注入必要花费必然的成原先掩护。由于一些常用的关键字(或敏感词)很难区分是恶意或非恶意。

2、应用存储历程而不是直接造访基表,可以供给更好的安然性。你可以在行级或列级节制数据若何被改动。相对付表的造访,你可以确认有履行权限许可的用户履行响应的存储历程。这也是造访数据办事器的惟一调用道路。是以,任何窃视者将无法看到你的SELECT语句。换句话说,每个利用只能拥有响应的存储历程来造访基表,而不是“SLEECT *”。

3、存储历程可以加密。(这点异常实用,设想一下,您的数据库办事器是托管的或租用的,你是否能心安理得的天天睡个安稳觉。假如竞争对手“一不小心”登上你的SQL Server,或经由过程注入获得了你的存储历程,然后响应的注入恶意的SQL,将您的营业逻辑乱改一通,而碰巧您五分钟前又没做备份,那会怎么样?)

(留意:加密存储历程前应该备份原始存储历程,且加密应该在支配到临盆情况前完成。)

存储历程的加密异常简单,我们看一个例子:

插入测试表

use testDb2

go

/奸淫奸淫奸淫*测试表奸淫奸淫奸淫奸淫奸淫**/

SET ANSI_PADDING ON

GO

CREATE TABLE [dbo].[tb_demo](

[id] [int] NOT NULL,

[submitdate] [datetime] NULL,

[commment] [nvarchar](200) NULL,

)

GO

SET ANSI_PADDING OFF

GO

Insert into [tb_demo]

select 1024, getdate(),REPLICATE('A',100);

WAITFOR DELAY '00:00:04';

Insert into [tb_demo]

select 1024, getdate(),REPLICATE('B',50);

go

您可能还会对下面的文章感兴趣: