Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 默认\u架构不工作_Sql Server - Fatal编程技术网

Sql server 默认\u架构不工作

Sql server 默认\u架构不工作,sql-server,Sql Server,我的用户XYZCORP\JShmoe的默认模式设置为“记帐”。 当我登录为XYZCORP\JShmoe并执行SELECT SCHEMA_NAME()时,它返回“dbo”,而不是“accounting” 因此,这项工作: Select * From accounting.UserInfo 但这并不是: Select * From UserInfo XYZCORP\JShmoe不是sysadmin 请注意,以上内容在我们的生产服务器上。 在我们的开发服务器上,一切似乎都是一样的(我可以看到所有的

我的用户
XYZCORP\JShmoe
的默认模式设置为“记帐”。
当我登录为
XYZCORP\JShmoe
并执行
SELECT SCHEMA_NAME()
时,它返回“dbo”,而不是“accounting”

因此,这项工作:

Select * From accounting.UserInfo
但这并不是:

Select * From UserInfo
XYZCORP\JShmoe
不是sysadmin

请注意,以上内容在我们的生产服务器上。
在我们的开发服务器上,一切似乎都是一样的(我可以看到所有的登录和用户属性),但它确实可以工作。

正如您所发现的,默认模式有点脆弱。我的建议是,不要依赖该机制进行对象解析,而是完全限定对象(例如accounting.UserInfo而不是UserInfo)。也就是说

以下几种情况可以解释你所看到的情况:

  • 该用户是sysadmin组的成员。根据文档,sysadmin的成员总是将dbo作为默认模式,而不管数据库所有权如何。检查sys.login_令牌视图以确认或拒绝此操作

  • 该用户是Windows组的成员,该组本身是数据库主体(即在sys.database_principals中有一个条目),并且具有默认的_架构集。文档中也清楚说明了解析的工作原理:如果用户属于这样一个组,则使用该组的默认模式。如果用户属于多个这样的组,则使用具有最低主体id的组的默认_模式(emphasis mine)。因此,即使您的开发服务器和生产服务器之间有相同的组,如果它们是以不同的顺序创建的,那么这两个环境之间的结果也会不同。检查sys.user_令牌视图以查看当前用户具有哪些组成员身份


因此,假设您不能接受我关于完全限定您的对象的初始建议,请检查上述两个条件。

非常感谢您快速而清晰的回答。该用户不是我提到的系统管理员,但我将检查windows/AD组,看看它是否解决了问题。我通常在我的查询中限定对象,但这是为编写自己的查询并且对限定的需要感到恼火的用户准备的。她也是在我的支票上签名的人;o) 系统管理问题上的“信任但验证”。快速查看sys.login_令牌将确保她不会从广告组或其他疯狂的地方获得它。