为什么SQL Server为初始数据库角色创建架构?

时间:2011-09-16 13:43:00

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

为什么SQL Server会为初始数据库角色创建模式,例如db_accessadmin,db_datareader等?我理解角色及其存在的原因,但我不明白为什么在创建数据库时给它们提供模式。有没有人使用它们?我无法想象Microsoft建议向它们添加表。我看不到向db_datawriter添加员工或产品表。它们是否拥有某种隐藏的系统对象?

2 个答案:

答案 0 :(得分:3)

其他人已经说过传统/向后兼容性而没有真正解释它。

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

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

答案 1 :(得分:1)

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

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