Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在数据库表中存储Sql脚本的最佳方法_Sql_Sql Server_Sql Injection - Fatal编程技术网

在数据库表中存储Sql脚本的最佳方法

在数据库表中存储Sql脚本的最佳方法,sql,sql-server,sql-injection,Sql,Sql Server,Sql Injection,我需要将存储过程执行脚本存储在数据库表中 例如: exec proc_name 'somedata' 这些是为了在将要更改的数据经过调整过程后的稍后时间执行 清除脚本以使语句不能用于sql注入的最佳方法是什么 是否有我可以使用的特定编码类型?或者,它就像在“上进行替换一样简单。您可以将脚本存储在存储过程或计划作业中,以便以后执行。我看不出有任何理由对存储过程进行编码,因为您可以设置用户权限,以防止不同的用户读取或甚至查看存储过程。那么听起来您可能希望使用varchar(max)列,并为参数设置

我需要将存储过程执行脚本存储在数据库表中

例如:

exec proc_name 'somedata'
这些是为了在将要更改的数据经过调整过程后的稍后时间执行

清除脚本以使语句不能用于sql注入的最佳方法是什么


是否有我可以使用的特定编码类型?或者,它就像在“

上进行替换一样简单。您可以将脚本存储在存储过程或计划作业中,以便以后执行。我看不出有任何理由对存储过程进行编码,因为您可以设置用户权限,以防止不同的用户读取或甚至查看存储过程。

那么听起来您可能希望使用varchar(max)列,并为参数设置一个单独的表。。如果您使用参数,您应该不会受到SQL注入的影响。请参见下面的quickie C#示例:

C#psuedo代码示例

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代码

您熟悉存储过程吗?您需要保存什么类型的“SQL脚本”?您没有提供可用于回答问题的信息。请编辑并提供有关您实际尝试执行的操作的详细信息;如前所述,这不是一个真正的问题,应该结束。谢谢。:)你好,ken,谢谢你的回答,但是我的问题很清楚,“存储sql脚本以便以后执行的最佳和最安全的方法是什么”,sql脚本?很可能是任何东西,但在本例中,它是一个存储过程的执行,如“exec proc_name‘somedata’”——希望能够消除混淆,因为作者拒绝将其变成真实的。这是一个相当复杂的元数据结构,用户将在其中更改数据,不幸的是,它并不是一个可以执行的单一SP。