我们刚刚将 SQL 2008 数据库复制到另一台服务器,用于测试目的。登录的典型用户使用特定架构中的某些对象。我们假设它是用户foo
和架构bar
。
foo
的默认架构bar
同时处于实例和数据库级别。但是,foo
登录时bar
,如果不使用完全限定名称,则无法在架构中找到任何对象。
为什么默认模式在这里不起作用?
答案1
有 foo 用户系统管理员SQL Server 上的权限?因为如果确实如此,则任何 sysadmin 用户都将默认分配有架构德博,与特定数据库的用户属性中的设置无关。
因此,为了拥有默认模式,用户需要拥有数据库角色,如 db_owner、db_datawriter 等,而不是服务器角色 sysadmin。
如果这不是你的情况请告诉我。
答案2
可能出现此问题的另一种情况(SQL 2008 R2)...
我有一个链接到 SQL 身份验证登录的用户,我试图将其与现有架构关联。登录名没有系统管理员权利,所以上述解决方案没有帮助。
我最终发现数据库仍然配置为 SQL 2000 兼容模式。更改为 SQL 2005 解决了该问题。
答案3
它将假定新服务器上的默认模式是 dbo;如果模式尚未随数据库一起复制。
这不是解决方案,但也许这可能会有所帮助,看看 msdn 文章。http://msdn.microsoft.com/en-us/library/dd283095.aspx