sql server的绿色sql替代方案

sql server的绿色sql替代方案,sql,sql-server,Sql,Sql Server,我需要一个sql server工具,该工具具有与greensql(sql inj保护)类似的功能。 大多数与sql server对话的客户端平台都支持查询参数。因此,您将向服务器发送一个带有占位符(变量名)的命令,其值如下所示: SELECT columns FROM [table] WHERE ID= @SomeParameter 客户机代码将发送@SomeParameter的值,该值与实际sql代码分开装箱,并且它的设置类似于tsql中的变量,因此它永远不会被直接替换到查询字符串中。数据就

我需要一个sql server工具,该工具具有与greensql(sql inj保护)类似的功能。

大多数与sql server对话的客户端平台都支持查询参数。因此,您将向服务器发送一个带有占位符(变量名)的命令,其值如下所示:

SELECT columns FROM [table] WHERE ID= @SomeParameter
客户机代码将发送@SomeParameter的值,该值与实际sql代码分开装箱,并且它的设置类似于tsql中的变量,因此它永远不会被直接替换到查询字符串中。数据就是数据,代码就是代码,两者决不能混为一谈

你可以把任何你想要的东西放在里面,无论你尝试什么,它都不会作为代码执行。这不会发生的。这比清理审计要好,因为您永远不必担心解析器中的错误,也不必担心下一版本的Sql Server添加了破坏旧解析器的新功能时会发生什么,或者如果您的清理程序正在破坏查询时会发生什么

因此,如果您正确构建应用程序,那么在sql server中就不需要这样的产品。现在,这类产品可能会强制开发人员使用好的过程(或者只是作为背景层,以防他们做错了),但在我看来,首先还是把精力花在做正确的事情上

另一方面,审计功能对我来说更有趣。CTO可以将此产品放在DB服务器和DBA服务器之间。DBA仍然可以完全访问服务器,但CTO可以在无法覆盖其跟踪的地方对其进行审计

在谷歌中,将“审计”与sql server结合使用而不是“注入”作为搜索向量,现在出现了一些产品,包括这一个:

大多数与sql server对话的客户端平台都支持查询参数。因此,您将向服务器发送一个带有占位符(变量名)的命令,其值如下所示:

SELECT columns FROM [table] WHERE ID= @SomeParameter
客户机代码将发送@SomeParameter的值,该值与实际sql代码分开装箱,并且它的设置类似于tsql中的变量,因此它永远不会被直接替换到查询字符串中。数据就是数据,代码就是代码,两者决不能混为一谈

你可以把任何你想要的东西放在里面,无论你尝试什么,它都不会作为代码执行。这不会发生的。这比清理审计要好,因为您永远不必担心解析器中的错误,也不必担心下一版本的Sql Server添加了破坏旧解析器的新功能时会发生什么,或者如果您的清理程序正在破坏查询时会发生什么

因此,如果您正确构建应用程序,那么在sql server中就不需要这样的产品。现在,这类产品可能会强制开发人员使用好的过程(或者只是作为背景层,以防他们做错了),但在我看来,首先还是把精力花在做正确的事情上

另一方面,审计功能对我来说更有趣。CTO可以将此产品放在DB服务器和DBA服务器之间。DBA仍然可以完全访问服务器,但CTO可以在无法覆盖其跟踪的地方对其进行审计

在谷歌中,将“审计”与sql server结合使用而不是“注入”作为搜索向量,现在出现了一些产品,包括这一个:

此产品有什么问题,您想找到做相同事情的不同产品?据我所知,greensql仅适用于mysql和postgresqlIt也适用于Microsoft SQL Server。此产品有什么问题,您想找到做相同事情的不同产品?据我所知greensql只适用于mysql和postgresqlIt也适用于Microsoft SQL Server。这是一个很好的答案。虽然我有一个关于这个参数的问题,为什么它不会发生。我了解SQL的基本知识,但这对我来说仍然很陌生。如果我们的@someparameter有一个值,比如:“Redmond”;drop table OrdersTable--“它仍然是SQLINJ。“它永远不会作为代码执行。它不会发生。”。那么它将如何执行?参数将根据类型进行检查。如果ID列为int,则“'Redmond';drop table…”将不会转换,并将引发异常。如果ID列是varchar,它将接受字符串并将其用作要查找的值。在这种情况下,如果您没有具有该值的idendifier,它将不会返回任何行。@user-情况并非如此,但您可以认为它运行的代码如下:
DECLARE@SomeParameter varchar(25);设置@SomeParameter=GetPassedParameterValue(0);选择。。。其中SomeColumn=@SomeParameter
这是一个很好的答案。虽然我有一个关于这个参数的问题,为什么它不会发生。我了解SQL的基本知识,但这对我来说仍然很陌生。如果我们的@someparameter有一个值,比如:“Redmond”;drop table OrdersTable--“它仍然是SQLINJ。“它永远不会作为代码执行。它不会发生。”。那么它将如何执行?参数将根据类型进行检查。如果ID列为int,则“'Redmond';drop table…”将不会转换,并将引发异常。如果ID列是varchar,它将接受字符串并将其用作要查找的值。在这种情况下,如果您没有具有该值的idendifier,它将不会返回任何行。@user-情况并非如此,但您可以认为它运行的代码如下:
DECLARE@SomeParameter varchar(25);设置@SomeParameter=GetPassedParameterValue(0);选择。。。其中SomeColumn=@SomeParameter