【发布时间】:2012-01-29 04:29:30
【问题描述】:
在阅读@PerformanceDBA 对Historical / auditable database 的回答时,他发表了以下声明:
在真实的(标准 ISO/IEC/ANSI SQL)数据库中,我们不 GRANT 对用户的 INSERT/UPDATE/DELETE 权限。我们 GRANT SELECT 和 仅参考(对选定的用户)所有插入/更新/删除都已编码 在事务中,这意味着存储过程。然后我们对每个 GRANT EXEC 存储过程到选定的用户(使用 ROLES 来减少管理)。
这是真的吗?这与动态生成 INSERT/UPDATE 的 ORM 工具有何不同?
更新
好的,这里有一个例子。我有一个带有两个界面的 Web 应用程序,一个 Admin 和一个 User。管理端使用 heavy ORM 能够动态生成数百个甚至数千个不同的 SQL 命令。
用户交互要简单得多,我有十几个 SP 可以处理几个投票按钮的任何 UPDATE/INSERT。显然,运行应用程序的用户具有非常不同的权限集。在管理方面,ORM 的 DB 用户对相关表具有完全 CRUD 访问权限,此应用程序根本没有使用任何 SP——如果不经过域模型中的业务逻辑,我不会想到接触数据.甚至批量数据导入也通过 ORM 进行处理。用户方面的 SP 我认为对这一原则稍作让步,因为它们是一个特例。
现在,我发现原始问题中的上述陈述有些令人不安,因为我认为这是一个“真正的”数据库,或者至少接近它。
【问题讨论】:
-
您是否担心 PerformanceDBA 可能会在您的数据库和应用程序设计面前大笑?你在这里描述的没有错。
-
嗯,我尝试总是担心我正在使用的设计可能不是最佳实践,就像一般的思维框架一样。
-
没错,但最佳实践和某人对“真实”的看法(无论引用中的意思)不仅仅取决于一件事,您需要从整体上看应用程序,而不仅仅是为您的应用程序找到最佳实践的数据库。如果您的应用使用 ORM,则 SP Only via ORM 将不允许您在 ORM 中应用最佳实践(延迟加载等)。
标签: database security database-permissions