在阅读@PerformanceDBA 对历史/可审计数据库的回答时,他发表了以下声明:
在真实的(标准 ISO/IEC/ANSI SQL)数据库中,我们不会向用户授予 INSERT/UPDATE/DELETE 权限。我们仅授予 SELECT 和 REFERENCES(对选定的用户)所有 INSERT/UPDATE/DELETE 都在 Transactions 中编码,这意味着存储过程。然后我们将每个存储过程上的 EXEC 授予选定的用户(使用 ROLES 来减少管理)。
这是真的?这与动态生成 INSERT/UPDATE 的 ORM 工具有何不同?
更新
好的,这里有一个例子。我有一个带有两个界面的 Web 应用程序,一个Admin和一个User。管理端使用重型ORM 能够动态生成数百个甚至数千个不同的 SQL 命令。
用户交互要简单得多,我有十几个 SP 可以处理几个投票按钮的任何 UPDATE/INSERT。显然,运行应用程序的用户具有非常不同的权限集。在管理方面,ORM 的 DB 用户对相关表具有完全 CRUD 访问权限,此应用程序根本没有使用任何 SP——如果不经过域模型中的业务逻辑,我不会想到接触数据. 甚至批量数据导入也通过 ORM 进行处理。用户方面的 SP 我认为对这个原则做了一个小小的让步,因为他们是这样一个特例。
现在,我发现原始问题中的上述陈述有些令人不安,因为我认为这是一个“真正的”数据库,或者至少接近它。