【问题标题】:Is there a way to protect all existing rows from being edited in an SQL table?有没有办法保护所有现有行在 SQL 表中不被编辑?
【发布时间】:2018-07-05 01:52:46
【问题描述】:

假设开发人员有一个他们不想编辑的记录表,因为这些值是敏感的,并且是根据当时的环境生成的。出于完整性目的 - 表中的记录可以添加,不能编辑。

在模型中,程序员设置了访问修饰符,使得​​只有构造函数可以设置属性,但一旦设置,就不能修改(除非反射)。

如何将同样的概念灌输到表中的行中?

【问题讨论】:

  • this 有帮助吗?
  • @John 谢谢。您知道不依赖用户权限的方法吗?这样连数据库所有者都不能编辑行?
  • 阻止管理员/所有者进行更改或阻止他们允许自己进行更改是相当困难的。

标签: c# sql database readonly


【解决方案1】:

可以通过撤销数据库用户的 UPDATE 和 DELETE 权限来保护表。然后在每个用户级别上实施此解决方案。

类似的概念存在于所有主要的数据库系统中。 更多权限信息(Oracle):https://www.techonthenet.com/oracle/grant_revoke.php

您还可以在 UPDATE/DELETE 之前使用触发器来引发错误,这也将阻止对尚未撤销权限的用户进行更改。 有关触发器 (Oracle) 的更多信息:https://www.techonthenet.com/oracle/triggers/before_update.php

【讨论】:

    【解决方案2】:

    如果您不想使用用户权限,那么您可以创建一个更新/删除前触发器并在该触发器内引发错误,这将不允许用户更新任何记录。虽然拥有触发器访问权限的用户可以修改或删除触发器。

    【讨论】:

    • 我认为 BEFORE 触发器更合适。
    猜你喜欢
    • 1970-01-01
    • 2020-01-31
    • 2020-12-10
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多