【问题标题】:Default schema not working with Windows user默认架构不适用于 Windows 用户
【发布时间】:2017-11-29 12:43:25
【问题描述】:

我们在安装时遇到问题,收到错误 "Invalid object name ..."
它似乎没有使用 Windows 用户上设置的默认架构分配。

我在 AdventureWorks2012 数据库中设置了一个测试并收到相同的结果。
当我使用 Windows 帐户(在 AdventureWorks2012 数据库中设置默认模式“Person”)连接到实例并执行语句 SELECT * FROM Address 时,我收到相同的错误 Invalid object name Address

接下来我创建了一个 SQL 登录,将登录映射到 AdventureWorks2012 数据库,并再次将默认模式设置为“Person”。当我使用 SQL 登录连接到实例,并执行命令SELECT * FROM Address 时,查询成功并返回结果。
我在 SQL 2012 和 SQL 2014 中都遇到了相同的结果。任何人都可以帮我解决为什么默认架构设置不适用于 Windows 用户吗?

【问题讨论】:

  • Windows 用户是否是系统管理员角色成员(即 SELECT USER 返回 'dbo')?
  • 你真的不应该依赖默认模式。您应该始终在查询中指定架构。考虑一下如果默认模式在未来某个时候发生变化,将会做多少工作。
  • 我赞同@SeanLange 所说的话。但我也喜欢一个很好的谜。有问题的 Windows 用户是否属于多个 Windows 组?如果是这样,他们很可能会从他们所属的其他组之一获取默认架构。
  • 我尝试将用户作为服务器 sysadmin 角色的成员,但没有 sysadmin 角色的成员身份 - 结果没有任何区别。
  • 至于“不依赖默认模式”语句 - 这是应用程序升级的一部分,我们无法控制它的编写方式。供应商允许客户创建他们想要的任何模式名称,使用该模式构建他们的对象,然后默认模式设置允许安装/升级过程定位对象。这是过去使用此过程的众多设置之一,也是我第一次遇到任何问题。我现在想知道在我们保持环境最新的情况下,累积更新是否引入了一些问题。

标签: sql-server schema default


【解决方案1】:

解决了我的问题。似乎数据库角色 db_owner 中的成员身份也默认为 dbo 架构,因为一旦我删除了 db_owner 数据库角色,默认架构分配就会启动并且查询成功完成。

感谢所有考虑我问题的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-03
    • 2019-04-26
    • 2021-12-23
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    相关资源
    最近更新 更多