我需要将存储过程执行脚本存储在数据库表中。将Sql脚本存储在数据库表中的最佳方法
作为一个例子:
exec proc_name 'somedata'
这些是在将要改变已通过审核流程数据之后稍后的时间执行。
清理脚本的最佳方法是什么,以便该语句不能用于sql注入。
是否有我可以使用的编码的特定类型?或者就像在上执行替换一样简单'
我需要将存储过程执行脚本存储在数据库表中。将Sql脚本存储在数据库表中的最佳方法
作为一个例子:
exec proc_name 'somedata'
这些是在将要改变已通过审核流程数据之后稍后的时间执行。
清理脚本的最佳方法是什么,以便该语句不能用于sql注入。
是否有我可以使用的编码的特定类型?或者就像在上执行替换一样简单'
您可以存储您的脚本,以便稍后在“存储过程”或计划作业中执行。我没有看到编码存储过程的任何理由,因为您可以将用户权限设置为防止不同的用户阅读甚至看到它们。
它的一个相当复杂的元数据结构,用户将会改变其中的数据,它不是一个真正可以执行的单个SP。 – shenku 2012-04-05 03:26:02
然后,它听起来像你想要使用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...
有没有办法 “清洗” 的脚本。
保护您的代码的唯一方法是将代码与数据分开。仅“清理”数据。
这就是为什么我们的代码与数据分离。
代码稳固且安全,数据可变,可以“清理”数据。
正如你打破这一基本法律,将代码视为数据,无法保护它。
根据任务的完全不同寻常的判断,我会说有一个合适的解决方案。
你只是选择了错误的架构。因此,你最好再问一个问题,比如“我想处理相当复杂的元数据结构(结构和目的)”,你将得到一个合适的解决方案,它不需要存储SQL代码数据。
您是否熟悉存储过程? – Colin 2012-04-05 01:54:02
需要保存什么样的“SQL脚本”?您没有提供可用于回答您的问题的信息。请编辑并提供有关您实际尝试执行的操作的详细信息;正如所写,这不是一个真正的问题,应该关闭。谢谢。 :) – 2012-04-05 02:00:47
您好,感谢您的回复,但我的问题很清楚,“什么是最好和最安全的方式来存储SQL脚本以供执行”,SQL脚本?好的可能是任何东西,但在这种情况下,它是一个存储过程的执行,如“exec proc_name'somedata'” - 希望清除混淆 – shenku 2012-04-05 03:20:13