Database “真实”数据库授予用户哪些权限?

Database “真实”数据库授予用户哪些权限?,database,security,database-permissions,Database,Security,Database Permissions,在阅读@PerformanceDBA对他的回答时,他发表了以下声明: 在真正的标准ISO/IEC/ANSI SQL数据库中,我们不授予 向用户插入/更新/删除权限。我们授予选择和 仅对选定用户的引用所有插入/更新/删除都进行编码 在事务中,这意味着存储的进程。然后我们在每一项上授予EXEC 选定用户的存储过程使用角色来减少管理 这是真的吗?如何与动态生成插入/更新的ORM工具相结合 更新 好的,这里有一个例子。我有一个web应用程序,有两个界面,一个管理员和一个用户。管理端使用重型ORM,能够动

在阅读@PerformanceDBA对他的回答时,他发表了以下声明:

在真正的标准ISO/IEC/ANSI SQL数据库中,我们不授予 向用户插入/更新/删除权限。我们授予选择和 仅对选定用户的引用所有插入/更新/删除都进行编码 在事务中,这意味着存储的进程。然后我们在每一项上授予EXEC 选定用户的存储过程使用角色来减少管理

这是真的吗?如何与动态生成插入/更新的ORM工具相结合

更新

好的,这里有一个例子。我有一个web应用程序,有两个界面,一个管理员和一个用户。管理端使用重型ORM,能够动态生成数百条甚至数千条不同的SQL命令

用户交互要简单得多,我有十几个SP可以处理几个投票按钮的任何更新/插入。显然,运行应用程序的用户拥有非常不同的权限集。在管理端,ORM的DB用户对相关表具有完全的CRUD访问权限,该应用程序根本没有使用SP,我不想在不经过域模型中的业务逻辑的情况下接触数据。甚至批量数据导入也通过ORM进行处理。在用户端的SPS,我认为这个原则的一个小小让步就是因为它们是一个特殊的情况。


现在,我发现上面的陈述在最初的问题中有点令人不安,因为我认为这是一个“真实”的数据库,或者至少接近它。

< P>我会说这是最好的设计,也是我通常喜欢实践的。由于来自应用程序的即席查询可能会很混乱,难以调整,甚至更难进行故障排除和跟踪,因此使用存储过程实现抽象级别是最容易的。应用程序只能进行存储过程调用。将存储的进程看作数据库的API

因此,如果以上是设计目的,那么应用程序用户只需要选择并在数据库上执行。这就是为什么:

create procedure MyTestProcedure
with execute as 'UserWithDMLRights'
as

    -- your CRUD code

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


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

它就像您的祖父在狂欢节上一样摇摆不定。ORMs可以利用SPs,但不能充分利用它们

SP只是生活的一种方式,就像第十一条戒律一样,但正如你所指出的,ORM并不是真的那样工作。我曾经认为整个SP层本身就是一种青春期前的ORM,您使用关系数据库,创建一组连接,并返回一组数据,其中包含填充对象所需的列/属性

现在,使用动态ORM类型的应用程序,需要在表上指定权限,如果您的DBA正在执行他们的工作,那么它的安全性也不会降低,只是需要做更多的工作,并且需要就表上允许的内容进行更多的沟通,如果您不需要删除,那么您的DBA需要知道不为其授予权限


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

我不能完全同意你的看法。SP-Only方法并不像您所传达的那样陈旧,它只是一种不同于ORM的方法。并且只允许在表上选择和在存储过程上执行大大地保持了沙箱尽可能小。@Shark抱歉-我不是说它是过时的,我的意思是在ORM成为主流之前,它是事实上的标准,仍然应该用于非ORM应用程序。但是对于ORM应用程序,仅SP的路线会降低ORM的好处。您是否担心PerformanceDBA会嘲笑您的数据库和应用程序设计?你在这里描述的没有错。我总是担心,我使用的设计可能不是最佳实践,只是作为一种总体思路。这是正确的,但最佳实践和某人对“真实”的看法,无论报价中的含义是什么,都取决于不止一件事,你需要考虑整个应用程序,不仅仅是数据库可以为您的应用程序找到最佳实践。如果您的应用程序正在使用ORM,那么仅通过ORM的SP将不允许您在ORM延迟加载等方面应用最佳实践。