通常,如果要在此架构中创建对象,则应明确指定dbo
架构。
就像您一样db_owner
,您的默认架构为dbo
,因此在创建对象时不指定dbo架构就没有问题。但是对于其他(Windows)用户,则不一样。
您的用户是Windows group
没有默认架构的成员。在这种情况下,当用户创建任何对象时都会创建相应的用户和架构,在此处记录如下:CREATE SCHEMA(Transact-SQL)
隐式架构和用户创建
在某些情况下,用户可以在没有数据库用户帐户(数据库中的数据库主体)的情况下使用数据库。在以下情况下可能会发生这种情况:
登录名具有CONTROL SERVER特权。
Windows用户没有单独的数据库用户帐户(数据库中的数据库主体),但是作为具有数据库用户帐户(Windows组的数据库主体)的Windows组的成员访问数据库。
如果没有数据库用户帐户的用户在未指定现有架构的情况下创建对象,则将在数据库中自动为该用户创建数据库主体和默认架构。创建的数据库主体和架构将具有与用户连接到SQL Server时使用的名称相同的名称(SQL Server身份验证登录名或Windows用户名)。
此行为对于允许基于Windows组的用户创建和拥有对象是必需的。但是,这可能会导致意外创建模式和用户。为避免隐式创建用户和架构,请尽可能显式创建数据库主体并分配默认架构。或在数据库中使用两部分或三部分的对象名称创建对象时明确声明现有模式。
要解决此问题,只需将dbo
架构分配default schema
给所有您的用户-Windows组,或者在创建对象时明确地编写架构。总是。