【问题标题】:Why does SQL Server Create Schemas for the initial DB Roles?为什么 SQL Server 为初始数据库角色创建架构?
【发布时间】:2011-11-18 17:24:35
【问题描述】:

为什么 SQL Server 会为初始数据库角色(例如 db_accessadmin、db_datareader 等)创建架构?我了解这些角色以及它们存在的原因,但我不明白为什么在创建数据库时为它们提供模式。有人使用它们吗?我无法想象微软建议向它们添加表格。我看不到将员工或产品表添加到 db_datawriter。他们是否拥有某种隐藏的系统对象?

【问题讨论】:

  • 向后兼容?

标签: sql sql-server database sql-server-2008 schema


【解决方案1】:

其他人在没有真正解释的情况下说遗留/向后兼容性。

在引入 SQL Server 2005 时,他们引入了user/schema separation。在此之前,每个用户和角色都隐含着与之关联的同名模式(除了创建用户或角色之外,没有其他方法可以创建模式)。

因此,对于那些存在于 2000(或更早)版本的 SQL Server 中的内置角色,数据库中始终存在与该角色同名的“可用”架构。因此,假设存在此类模式,可能已经编写了一些代码;更高版本的 SQL Server 确保这仍然是正确的,以避免破坏此类代码。

【讨论】:

    【解决方案2】:

    旧版。

    您应该使用显式 GRANT(例如 GRANT ALTER USER TO ...),而不是使用旧的固定数据库角色。

    如果您使用sp_grantdbaccess,您还会创建一个架构:您应该使用CREATE USER

    【讨论】:

    • 嗯...固定数据库角色是遗留的?您是否有指向已弃用的官方文档的链接?
    • @Ben Thul:好点实际上,MSDN 说它们并没有被弃用。我现在使用 GRANT,所以更清楚你得到了什么
    猜你喜欢
    • 2013-09-21
    • 2011-10-15
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多