【问题标题】:What permissions to 'real' databases grant users? [closed]“真实”数据库授予用户什么权限? [关闭]
【发布时间】: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


【解决方案1】:

我会说这是最好的设计,也是我通常喜欢练习的。由于来自应用程序的即席查询可能很混乱、难以调优,甚至更难以排除故障和跟踪,因此使用存储过程最容易获得抽象级别。应用程序只能进行存储过程调用。将存储过程视为数据库的 API。

所以如果以上是设计目的,那么应用程序用户只需要数据库上的SELECTEXECUTE。这就是为什么:

create procedure MyTestProcedure
with execute as 'UserWithDMLRights'
as

    -- your CRUD code

go

如果典型应用用户只有SELECTEXECUTE,那么执行上述存储过程的权限就足够了。存储过程中的INSERT/UPDATE/DELETE 将在UserWithDMLRights 的安全上下文中执行,并且该数据库用户必须具有INSERT/DELETE/UPDATE 权限。

至于 ORM,我倾向于同意你的看法。我相信 L2S 只是使用 sp_executesql 进行了大量的临时查询调用,所以我相信你会遇到这个理论和使用上述安全实践的问题。

【讨论】:

    【解决方案2】:

    它就像你的爷爷在狂欢中一样。 ORM 可以利用 SP,但不能充分利用它们。

    SP Only 确实是过去的生活方式,就像第十一条诫命,但正如您指出的那样,ORM 并不是真的那样工作。我曾经认为整个 SP 层本身就是一种青春期前的 ORM,您获取了关系数据库,进行了一堆连接并返回了一组数据,其中包含填充对象所需的列/属性。

    如今,对于动态 ORM 类型的应用程序,需要在表格上指定权限,如果您的 DBA 正在做他们的工作,这同样是安全的,只是需要更多的工作,并且需要就允许的内容进行更多的沟通在表上,如果您不需要 DELETE,那么您的 DBA 需要知道不要为其授予权限。

    优秀的 DBA 知道具有表访问权限的安全数据库与仅具有 SP 访问权限的数据库一样安全。让不太自信的 DBA 相信这一点要困难得多。

    【讨论】:

    • 我不能完全同意你的看法。 “仅 SP”方法并不像您所传达的那样陈旧,它只是一种与 ORM 方式不同的方式。并且只允许表上的SELECT 和存储过程上的EXECUTE 极大地保持沙箱尽可能小。
    • @Shark 抱歉——我不是说它过时,我的意思是在 ORM 成为主流之前,它是事实上的标准,仍然应该适用于非 ORM 应用程序。但是对于 ORM 应用来说,仅 SP 路线会降低 ORM 的优势。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 2014-03-14
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    相关资源
    最近更新 更多