【问题标题】:Multiple Schema Permissions In SQL Server 2008 R2SQL Server 2008 R2 中的多个架构权限
【发布时间】:2013-02-04 19:39:01
【问题描述】:

我们正在将数据库从 SQL Server 2000 迁移到 SQL Server 2008 R2,但我们的架构遇到了问题。在 SQL Server 2000 中,如果您没有在对象名称前加上所有者/模式(例如 SELECT * FROM blah 而不是 dbo.blah),SQL Server 仍然可以解决。即使您的对象在非 dbo 所有者中,这也有效。

在 SQL Server 2005 中,这已按此处所述进行了更改:http://blogs.msdn.com/b/mssqlisv/archive/2007/03/23/upgrading-to-sql-server-2005-and-default-schema-setting.aspx

我可以通过设置用户的默认模式 xyz 而不是 dbo 来绕过具有 2 个模式的数据库。我遇到的问题是在有第三个模式(abc.blah)的数据库中。当我将用户设置为默认 xyz 时,他们可以顺利进入 dbo,但在尝试从 abc 中选择不带架构前缀的内容时会出现 Invalid Object 错误(abc.blah 工作正常)。

当然,一开始就不应该这样编码,但那是一场不同的战斗。我已经验证权限不是问题。

我相信其他人也遇到过这种情况。除了修复代码,有没有人找到解决方法?

【问题讨论】:

    标签: sql sql-server-2008-r2


    【解决方案1】:

    这里没有太多的魔法;修复代码。

    假设您在两个架构中没有同名对象,您可以创建大量同义词,例如:

    CREATE SYNONYM xyz.foo FOR dbo.foo;
    

    ...但这会像修复代码一样一团糟。

    【讨论】:

    • 谢谢 Aaron... 和我预期的差不多。我注意到我对 2 个模式的解决方法适用于 SQL 用户,但不适用于 NT 用户。知道为什么会这样吗?
    • 我认为 SQL Server 2012 中已修复的默认架构和 win auth 存在问题(内存模糊,我懒得搜索)
    最近更新 更多