2012-04-05 60 views
-1

我需要将存储过程执行脚本存储在数据库表中。将Sql脚本存储在数据库表中的最佳方法

作为一个例子:

exec proc_name 'somedata' 

这些是在将要改变已通过审核流程数据之后稍后的时间执行。

清理脚本的最佳方法是什么,以便该语句不能用于sql注入。

是否有我可以使用的编码的特定类型?或者就像在上执行替换一样简单'

+7

您是否熟悉存储过程? – Colin 2012-04-05 01:54:02

+1

需要保存什么样的“SQL脚本”?您没有提供可用于回答您的问题的信息。请编辑并提供有关您实际尝试执行的操作的详细信息;正如所写,这不是一个真正的问题,应该关闭。谢谢。 :) – 2012-04-05 02:00:47

+0

您好,感谢您的回复,但我的问题很清楚,“什么是最好和最安全的方式来存储SQL脚本以供执行”,SQL脚本?好的可能是任何东西,但在这种情况下,它是一个存储过程的执行,如“exec proc_name'somedata'” - 希望清除混淆 – shenku 2012-04-05 03:20:13

回答

0

您可以存储您的脚本,以便稍后在“存储过程”或计划作业中执行。我没有看到编码存储过程的任何理由,因为您可以将用户权限设置为防止不同的用户阅读甚至看到它们。

+0

它的一个相当复杂的元数据结构,用户将会改变其中的数据,它不是一个真正可以执行的单个SP。 – shenku 2012-04-05 03:26:02

1

然后,它听起来像你想要使用varchar(max)列,并有一个单独的表的参数..如果你使用参数你应该是安全的SQL注入。见下面匆匆的C#示例:

C#伪代码示例

SQLCommand command = new SQLCommand("select * from myScripts where scriptid = @scriptid"); 
SQLParameter param = new SQLParameter("@scriptid", 12, int); 

...new SQLCommand("select * from myParams where scriptid = @scriptid"); 
...new SQLParameter... 

DataReader dr = new blah blah... 

SQLCommand userCommand = new SQLCommand(dr['sql']); 

foreach (parameter in params) 
{ 
    userCommand.Parameter.Add(parameter['name'], value); 
} 

userCommand.Execute... 
0

有没有办法 “清洗” 的脚本。
保护您的代码的唯一方法是将代码与数据分开。仅“清理”数据。

这就是为什么我们的代码与数据分离。
代码稳固且安全,数据可变,可以“清理”数据。

正如你打破这一基本法律,将代码视为数据,无法保护它。

根据任务的完全不同寻常的判断,我会说有一个合适的解决方案。
你只是选择了错误的架构。因此,你最好再问一个问题,比如“我想处理相当复杂的元数据结构(结构和目的)”,你将得到一个合适的解决方案,它不需要存储SQL代码数据。

相关问题