Sql server 使用缺少WHERE子句阻止tsql更新

Sql server 使用缺少WHERE子句阻止tsql更新,sql-server,sql-server-2005,Sql Server,Sql Server 2005,在MS SQL Server 2005的上下文中 有没有办法停止对没有WHERE子句的数据库执行delete和update sql语句 理想情况下,最好将这种“阻塞”限制在一组用户/角色上。简单地回答:不 您有责任确保不发送此类查询。SQL Server无法知道或查明命令何时确实缺少WHERE子句,或者何时确实应该在没有WHERE的情况下执行该命令。简单地回答:否 您有责任确保不发送此类查询。SQL Server无法知道或查明命令何时确实缺少WHERE子句,或者何时确实应该在没有WHERE的情况

在MS SQL Server 2005的上下文中

有没有办法停止对没有WHERE子句的数据库执行delete和update sql语句

理想情况下,最好将这种“阻塞”限制在一组用户/角色上。

简单地回答:不

您有责任确保不发送此类查询。SQL Server无法知道或查明命令何时确实缺少WHERE子句,或者何时确实应该在没有WHERE的情况下执行该命令。

简单地回答:否



您有责任确保不发送此类查询。SQL Server无法知道或查明命令何时确实缺少WHERE子句,或者何时确实应该在没有WHERE的情况下执行该命令。

如果行数与表中的行数相同,则可以创建一个触发器来回滚更新。如果需要该触发器代码,请留下注释。

如果行数与表中的行数相同,则可以创建一个执行更新回滚的触发器。如果您想要触发代码,请留下评论。

如果您不信任有人不这样做,他们不应该拥有直接SQL访问权限。我完全同意,但我无法控制谁拥有访问权限:那么您可能需要查看一些源代码控制或更改跟踪软件。如果您不信任有人不这样做,他们不应该有直接的SQL访问权限。我完全同意,但我无法控制谁有访问权限:那么你可能想研究一些源代码管理或更改跟踪软件。我知道答案,但我想我还是会问这个问题。不是我,而是我们愚蠢的支持团队;我希望有一种新的方法来解决这个问题。@mouters:一种方法可能是设置行数x限制-但这会带来很多其他问题,例如分页等。@mouters:能够为SQL Server中的每个用户/角色定义一个最大返回n行数可能很好-但是,好的,现在,没有比这更好的了……为了进一步探索这一点,用户正在使用sql managament studio;在执行where子句之前,这里有没有任何选项,或者是一个自定义插件或宏来验证sql?我知道答案,但我想我还是会问这个问题。不是我,而是我们愚蠢的支持团队;我希望有一种新的方法来解决这个问题。@mouters:一种方法可能是设置行数x限制-但这会带来很多其他问题,例如分页等。@mouters:能够为SQL Server中的每个用户/角色定义一个最大返回n行数可能很好-但是,好的,现在,没有比这更好的了……为了进一步探索这一点,用户正在使用sql managament studio;这里有什么选项,或者是一个自定义插件或宏,用于在执行之前验证where子句的sql?感谢您的想法-它是否是应用于所有表的通用触发器,以及这将如何影响性能?触发器是每个表的,所以每个表都需要一个触发器。这当然不是最好的表现。如果您的触发器在用户名“bad1”、“bad2”和,。。开始最终,它只会真正影响坏用户。您可能不想在每个触发器中硬编码坏用户,因此可以在存在的情况下从BadUserTable中选择1,其中BadUserName=user\u name开始。。。ENDYou还可以使用CONTEXT_INFO与触发器通信,其中有效的应用程序更新/删除将设置其值,触发器将忽略任何检查,但如果应用程序外部的人试图更改数据库,触发器可以执行额外的检查,请参阅:感谢您对这一点的思考-它是否是应用于所有表的通用触发器,以及这将如何影响性能?触发器是每个表的,所以每个表上都需要一个触发器。这当然不是最好的表现。如果您的触发器在用户名“bad1”、“bad2”和,。。开始最终,它只会真正影响坏用户。您可能不想在每个触发器中硬编码坏用户,因此可以在存在的情况下从BadUserTable中选择1,其中BadUserName=user\u name开始。。。ENDYou还可以使用CONTEXT_INFO与触发器通信,其中有效的应用程序更新/删除将设置其值,触发器将忽略任何检查,但如果应用程序外部的人试图更改数据库,触发器可以执行额外的检查,请参阅: