【问题标题】:SQL Server 2008 - Removing schema ownershipSQL Server 2008 - 删除架构所有权
【发布时间】:2011-07-09 02:31:56
【问题描述】:

我刚刚创建了一个新的 Web 应用程序,它接受来自用户的一些基于表单的输入并将其插入到数据库中。为此,我在数据库中创建了一个新用户,并最初为该用户分配了两个角色和架构 ...

db_datareader
db_datawriter

经过深思熟虑后,我意识到用户不需要成为db_datareader 角色的一部分,因为用户只是将数据插入数据库而从不读取任何数据。所以我回去删除了db_datareader的角色,发现架构选项是灰色的。我无法从 db_datareader 的架构所有权中删除用户。

如何从特定架构的所有权中删除用户?我是否应该首先分配架构所有权?

我以 SQL Server 和 Windows 7 操作系统的管理员身份登录。

【问题讨论】:

    标签: sql-server schema


    【解决方案1】:

    我今天遇到了同样的问题,并找到了一种将用户删除为架构所有者的方法。打开数据库中安全性下方的架构节点,并更改您错误使用默认所有者的用户的所有者。例如,如果某个奇怪的用户名被列为 db_datareader 的架构所有者,则将其更改为 db_reader 等等。

    【讨论】:

    • 我唯一要添加的是刷新 Sql Mgmnt 中的数据库节点。在进行 Doreen 的更改或错误分配给架构的 sql 用户后,Studio(右键单击|刷新)仍会显示在 sql mgmnt studio 仍处于打开状态时检查的架构成员资格。没有必要,但可以避免错误地认为修复无效。
    【解决方案2】:

    不,您不应该将架构的所有权分配给用户。您应该刚刚使用户成为模式的成员。将所有权恢复为 dbo 并检查用户帐户是否仍不是架构的成员。

    【讨论】:

    • 谢谢。我按照您的建议做了,用户不再是架构的所有者。我发现架构所有权的 who 概念令人困惑。对涵盖该领域的资源或教程有什么建议吗?
    • 嗯,我参加了 SQL Server 2008 培训班。在此之前,我对架构的全部内容感到困惑。我真正发现的是,如果您需要对象的精细权限(即多个用户可以访问(或不访问)模式中的对象),那么模式实际上只不过是像命名空间这样的逻辑容器 - 仅对开发商。否则,如果帐户可以访问架构中的所有对象,则向架构中添加更多对象会隐式授予架构成员配置的访问权限。
    • 就我个人而言,对于我使用 Active Directory 安全性的内部企业应用程序,我发现架构仅对我们开发人员作为命名空间有用。我创建数据库(或从现在开始的应用程序)角色并将角色权限分配给对象。