以 dbo 架构命名的 SQL Server 表
Posted
技术标签:
【中文标题】以 dbo 架构命名的 SQL Server 表【英文标题】:SQL Server Tables Named With dbo Schema 【发布时间】:2011-06-17 00:02:55 【问题描述】:我一直发现 SQL Server 架构非常令人困惑。也许你们可以帮助我消除一些困惑。我正在使用 SQL Server 2008 Express 和 MS SQL Server 2008 Management Studio,但我认为我的问题与任何 MS SQL Server 2008 版本有关。我一直在不同服务器上试验不同的数据库和不同的 SQL Server 实例。例如,我一直在我们公司的服务器上做一些工作,但我也一直在我的共享网络托管服务器上处理一些数据库。这可能是我陷入某些困惑的部分原因。
1) 这个架构名称是从哪里来的? 我想当我几周前第一次开始使用 SQL Server 时,我没有看到任何附加到表名称的架构名称。当导入数据库或使用 MS Access 迁移助手时,我开始看到它们。有可能根本不使用模式吗?他们在某些情况下不会出现吗?
2) 架构名称不是“dbo”?在最近的一个项目中,我的架构一直显示为 MyLongUserName.tablename 而不是 dbo.tablename。我很困惑为什么有时用户帐户似乎默认为 dbo 模式,而其他时候它被分配给与用户帐户同名的模式。这与使用 NT 身份验证与 SQL Server 身份验证登录有什么关系吗?
3) 名为 dbo 的用户? 我不记得在我当前正在使用的数据库中创建了一个名为 dbo 的用户,但我在用户列表中看到了它。是否必须存在用户帐户“dbo”才能使模式“dbo”存在?用户名和架构名称总是平行的吗?
4) 是否使用模式 - 你能不使用它们吗? 你是否将模式用于小型项目,例如用于基本网站的两表或三表数据库?您可以完全避免使用模式还是只使用默认的“dbo”模式?即使在非常小的项目中,您也会创建额外的架构并为其分配某些权限和用户帐户吗?
我一直在使用Murach 为开发人员编写的 SQL Server 2008 书,我发现它对于消除我的困惑并没有太大帮助。我正在阅读这样的句子:“如果您在创建对象时没有指定架构,它们将存储在默认架构中。”等等,怎么做我知道“默认架构”是什么?我们是在谈论用户帐户的默认架构还是每个数据库都有“默认架构”?它总是“dbo”吗?为什么当我创建对象时,它会将它们分配给模式 MyLongUserName 而不是“dbo”?
【问题讨论】:
【参考方案1】:您可能想先阅读以下内容:What good are SQL Server schemas?
从 SQL Server 2005 开始,架构与用户 http://msdn.microsoft.com/en-us/library/ms190387.aspx 分开。
在此之前,每个用户都拥有几个表,这些表将位于他们的“空间”中。这个“空间”现在是一个模式,它是一种对表进行分组的方式。
SQL Server 对象的名称有 4 个部分
server.database.schema.objectname当你省略其中一个或多个时,你是从右边命名的
database.schema.objectname - 隐含的当前服务器 schema.objectname - 隐含的当前数据库 objectname - 隐含的默认模式。可以为每个用户分配一个默认架构,但默认情况下这将是“dbo”"dbo" 是一个特殊的模式,它是数据库所有者。它存在于每个数据库中,但您可以将模式(如文件夹)添加到数据库中
如果您从 SQL Server 2000 dbs 的旧安装迁移到 2005 或更高版本,您可能会携带 schemas-named-as-users,因为用户“拥有”这些表。
【讨论】:
以上是关于以 dbo 架构命名的 SQL Server 表的主要内容,如果未能解决你的问题,请参考以下文章
关闭SQL Server管理器(SSMS)拖动时大括号及dbo(架构)的办法
具有不同所有者的 SQL Server 所有权链跨架构,用于从多个架构中选择视图
Sql server 2008拒绝了对对象 'xx表' (数据库 'xx',架构 'dbo')的 SELECT 权限解决办法