我想知道你是否可以让Sql Server查看传入的查询string,并拒绝匹配某种模式的查询string。 换句话说,对于某种types的查询(可能用正则expression式来标识),我想知道Sql Server是否可以返回一个错误消息,而不是像往常一样处理它们。
为了更具体一些,并给出一个潜在的用例,请考虑一下Sql Injection攻击的描述 。 如果我的网站受到这些技术的持续攻击,如果修补网站看起来像一个漫长的过程,它会诱人(如果Sql允许它)试图得到一些临时的缓解,通过在Sql的基本上说
如果查询匹配正则expression式CAST(0x [0-9A-Za-z] {20,}则不执行它!
我的猜测是,如果这种过滤是可能的,那么这样做就需要编写一些定制的Sql Server插件DLL。 但是,也许你可以用Sql Server 2008的内置审计function做这样的事情? 我真的不知道,我不知道在文档中哪里是最好的地方开始寻找。
如果你想指出为什么数据库是一个愚蠢的地方,试图阻止SQL注入攻击,没关系。 但是我的主要问题不是在这个特定的用例中是否是一个好主意,而是这样的查询过滤/拒绝是否可能。
你的预感是正确的:数据库是解决这个问题的错误地方。 SQL注入工作的全部原因是因为这些命令是有效的SQL。 一般情况下,当应用程序将查询传递给数据库服务器时,特殊字符已经变成正常文本。
如果您不想在应用程序级别上缓解这一点,那么您应该查看软件防火墙解决scheme,如dotDefender。 在我看来,这也是在错误的地方攻击问题,而最终还是会通过防火墙的逻辑。
不,你不能有基于某种模式匹配的SQL服务器拒绝语句。 如何拒绝所有用户的SELECT权限,并强制他们使用您创build的存储过程来访问基础表中的数据? 只要你做了很好的validationsprocs的input你应该是相当安全的。
不,没有办法让SQL Server拒绝基于模式匹配的命令。 要做这样的事情,你必须写一个监听器来接受SQL命令,检查它们,然后把它们传递给数据库引擎执行。
在应用程序层处理这个问题会好得多。