尝试更改架构所有者时,架构“dbo”的更改失败

4 sql-server-2008

我有一些 MS Access 代码,它使用 ODBCDirect 在 SQL 2008 R2 DB 中执行一些 sql 语句。

sql 语句不指定架构名称,因此随后使用 windows 用户作为架构名称执行,而不是我正在寻找的结果。架构应该是 dbo。

所有用户都属于一个 Windows 组,它是一个 SQL 登录名。

我读到,如果我将架构 dbo 的所有者更改为 windows 组,则未指定架构的 sql 语句将默认为 dbo。

所以我试图将架构的所有者更改为 windows 组但收到消息

架构“dbo”的更改失败

我似乎也更改了对数据库中模式的更改权限。

如果是这样,sql 是否允许您更改所有者???

马尔科姆

gbn*_*gbn 5

您无法更改“dbo”的所有者,因为它是一个系统架构。来自ALTER AUTHORIZATION,“特殊情况和条件”:

SCHEMA
... 无法更改 sys、dbo 或 information_schema 的所有者

而且您还不能为 Windows 登录设置默认架构(还)。

这在两个方面很重要:

  • 当您希望对象位于 dbo 中时,您正在发出 DDL (CREATE TABLE) 等
  • 如果没有架构,您将没有可重用的 DML 查询计划,因此不同的用户将有不同的查询计划

基本上,您有两种选择:

  • 修复查询
  • 停止使用 ODBCDirect 从 MS Access 到 SQL Server。

第三个选项既丑陋又危险,是使 Windows 登录为“系​​统管理员”,这意味着它们将始终映射到 dbo。我不推荐这个

就个人而言,我不再使用 dbo 模式:请参阅dba.se(以及那里的进一步链接)