<分区>
在阅读@PerformanceDBA 对Historical / auditable database 的回答时他发表了这样的声明:
In a real (standard ISO/IEC/ANSI SQL) database, we do not GRANT INSERT/UPDATE/DELETE permission to users. We GRANT SELECT and REFERENCES only (to chosen users) All INSERT/UPDATE/DELETEs are coded in Transactions, which means stored procs. Then we GRANT EXEC on each stored proc to selected users (use ROLES to reduce administration).
这是真的吗?这与动态生成 INSERT/UPDATE 的 ORM 工具有什么关系?
更新
好的,下面是一个示例。我有一个具有两个界面的 Web 应用程序,Admin 和 User。管理端使用重型 ORM,能够动态生成数百甚至数千条不同的 SQL 命令。
用户交互要简单得多,我有十几个 SP 可以处理几个投票按钮的任何更新/插入。显然,运行应用程序的用户具有非常不同的权限集。在管理员方面,ORM 的数据库用户对相关表具有完全的 CRUD 访问权限,这个应用程序根本没有使用任何 SP——我不会想到在不通过域模型中的业务逻辑的情况下接触数据.甚至批量数据导入也通过 ORM 进行处理。用户端的 SP 我认为对这一原则的小让步只是因为它们是一种特殊情况。
现在,我发现原始问题中的上述陈述有些令人不安,因为我认为这是一个“真实的”数据库,或者至少接近它。