Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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_Database_Security - Fatal编程技术网

是否可以在sql数据库级别阻止批处理更新?

是否可以在sql数据库级别阻止批处理更新?,sql,sql-server,database,security,Sql,Sql Server,Database,Security,一个简单愚蠢的更新表SET something=另一个在意外情况下始终为true的表将很容易破坏数据库中的所有内容。这可能是人为错误、SQL注入/溢出/截断攻击,或者是构建WHERE的代码中的错误 流行的数据库是否提供了通过限制一条SQL语句中可以更新的最大行数来保护表的功能 我指的是某种防御性设置,适用于数据库上的预表访问权:无法绕过,编程代码更少,没有人为错误,除非授予自己太多的访问权。我什么都不知道 我不确定这能解决什么问题。数据库如何区分SQL注入攻击和碰巧超出您限制的夜间批处理更新 一

一个简单愚蠢的更新表SET something=另一个在意外情况下始终为true的表将很容易破坏数据库中的所有内容。这可能是人为错误、SQL注入/溢出/截断攻击,或者是构建WHERE的代码中的错误

流行的数据库是否提供了通过限制一条SQL语句中可以更新的最大行数来保护表的功能


我指的是某种防御性设置,适用于数据库上的预表访问权:无法绕过,编程代码更少,没有人为错误,除非授予自己太多的访问权。

我什么都不知道

我不确定这能解决什么问题。数据库如何区分SQL注入攻击和碰巧超出您限制的夜间批处理更新

一个假设是自动提交设置为true。如果没有实施SQL注入攻击,那么您总是有机会回滚它,假设您正在查看日志等


我认为真正的答案是更好的应用分层、验证、绑定等。如果这些措施到位,你就不能进行SQL注入。

我什么都不知道

我不确定这能解决什么问题。数据库如何区分SQL注入攻击和碰巧超出您限制的夜间批处理更新

一个假设是自动提交设置为true。如果没有实施SQL注入攻击,那么您总是有机会回滚它,假设您正在查看日志等


我认为真正的答案是更好的应用分层、验证、绑定,等等。如果这些措施到位,您就不能执行SQL注入。

您可以在事务中包装更新,并提示用户在提交之前让他们知道要更新多少行。

您可以在事务中包装更新,并提示用户在提交之前让他们知道要更新多少行提交。

您可以添加一个触发器,用于检查有多少行正在被更新。计算插入的魔法触发器表,如果有太多行,则引发错误。

您可以添加一个触发器,用于检查有多少行正在被更新。计算插入的魔法触发器表,如果有太多行,则引发错误。

我理解您的原因,但您希望如何处理合法的批处理

如果您手动进行一些更改,并且希望能够撤消这些更改,请使用事务。 如果您希望能够重新构建数据,请使用更改存档。
但您无法仅从结果100%正确的批次中创建此为正确/不正确批次的检查。

我理解您的原因,但您希望如何处理合法的批次

如果您手动进行一些更改,并且希望能够撤消这些更改,请使用事务。 如果您希望能够重新构建数据,请使用更改存档。
但您无法仅从结果100%正确的批中创建此为正确/不正确批的检查。

您只需要编写存储过程,并仅向用户公开这些存储过程。在正常情况下,你不会在私人账户中工作。仅在需要时以管理员身份连接。

您只需编写存储过程,并仅向用户公开这些存储过程。在正常情况下,你不会在私人账户中工作。仅在需要时以管理员身份连接。

简短回答是“否…”

Oracle允许您设置可分配给用户的定义,以限制资源(如CPU、逻辑读取)的使用。但是,这并不是为了您的目的,而是为了在多用户环境中管理资源

也许更重要的是,它还具有这样的功能,以便意外的更改可以很容易地撤消

您的大多数场景都应该通过其他方式处理:

人为错误:大多数用户不应该被授予对表的更新权限,他们应该被强制调用API,通常通过应用程序来执行更新。DBA在访问实时数据库时必须非常小心—不要管行限制,他们可以完全删除表! 注射攻击:可以而且应该防止这些攻击的发生 代码错误:应该通过适当的测试来发现这些错误
如果您的数据很重要,则应按上述方式对其进行适当保护和维护,并且不需要最大行更新限制;如果您的数据不够重要,无法像上面那样进行保护,那么为什么要担心呢?

简单的回答是不

Oracle允许您设置可分配给用户的定义,以限制资源(如CPU、逻辑读取)的使用。但是,这并不是为了您的目的,而是为了在多用户环境中管理资源

也许更重要的是,它还具有这样的功能,以便意外的更改可以很容易地撤消

您的大多数场景都应该通过其他方式处理:

人为错误:大多数用户不应该被授予对表的更新权限,他们会 应该强制通过应用程序调用API来执行更新。DBA在访问实时数据库时必须非常小心—不要管行限制,他们可以完全删除表! 注射攻击:可以而且应该防止这些攻击的发生 代码错误:应该通过适当的测试来发现这些错误
如果您的数据很重要,则应按上述方式对其进行适当保护和维护,并且不需要最大行更新限制;如果您的数据不够重要,无法像上面那样进行保护,那么为什么要担心呢?

正如David B首先指出的那样,您可以通过触发器来实现这一点。无论如何,用@@ROWCOUNT测试来启动触发器是一种很好的做法。想象一下:

CREATE TRIGGER dbo.trg_myTrigger_UD ON dbo.myTable FOR UPDATE, DELETE
AS
IF @@ROWCOUNT <> 1 RETURN
这将排除任何试图影响多行的更新和/或删除


一般来说,我从0的行数测试开始。关键是,如果触发器是由实际影响no rows UPDATE table SET col1='hey',其中1=0的某个事件启动的,那么运行触发器代码就没有意义了,因为它不会做任何事情。

正如David B首先指出的那样,您可以使用触发器来执行此操作。无论如何,用@@ROWCOUNT测试来启动触发器是一种很好的做法。想象一下:

CREATE TRIGGER dbo.trg_myTrigger_UD ON dbo.myTable FOR UPDATE, DELETE
AS
IF @@ROWCOUNT <> 1 RETURN
这将排除任何试图影响多行的更新和/或删除



一般来说,我从0的行数测试开始。关键是如果触发器是由某个实际影响了no rows UPDATE table SET col1='hey'其中1=0的东西启动的,那么运行触发器代码就没有意义了,因为它不会做任何事情。

这是编码,如果出现错误,它可能会失败。我正在寻找一些更纯粹的配置,甚至可以保护自己从查询分析器。好的。David B的触发方法可能更合适。我已经在应用程序中看到了很多事务处理方法,但当然它对您的情况没有帮助。这是编码,如果出现错误,它可能会失败。我正在寻找一些更纯粹的配置,甚至可以保护自己从查询分析器。好的。David B的触发方法可能更合适。我已经在应用程序中看到了很多事务处理方法的应用,但是在您的案例中它当然不会帮助您。但是您希望实现对批处理合法性的确定吗?有趣的方法。我喜欢。如果批处理是合法的,那么必须先禁用触发器。额外的行动需要事先考虑,这将大大降低事故发生的可能性。我倾向于尽可能避免触发器,但这是一个很好的,希望对他们轻量使用,但你想实现批量的合法?有趣的方法确定。我喜欢。如果批处理是合法的,那么必须先禁用触发器。额外的行动需要事先考虑,这将大大降低事故发生的可能性。如果可能的话,我倾向于避免使用触发器,但这对它们来说是一个很好的、希望很轻的用法。这只是一个头脑风暴。例如,减少在phpmyadmin或SQLServerManagementStudio中犯愚蠢错误的人所做的更改。例如,如果DB本机支持它,我们就不必在代码中重复检查模式,这只是一个头脑风暴。例如,减少在phpmyadmin或SQLServerManagementStudio中犯愚蠢错误的人所做的更改。例如,如果DB本机支持它,我们不必重复检查,代码中的模式。我认为OP需要一个方法,该方法甚至可以对基础表执行特殊查询。这很好-用户可以只运行查询。我认为OP需要一个方法,该方法甚至可以对基础表执行特殊查询。这很好-用户可以只运行查询。例如,数据库用户角色有三个:用户、主管、管理员。用户每次只能更新一行。主管可以批量更新多达500,管理员可以做更多。或者,另一个例子是,除非获得了安全令牌,否则无法执行完整表更新。用户每次只能更新一行。主管可以批量更新多达500,管理员可以做更多。或者,例如,除非获得安全令牌,否则无法执行完整表更新。