今天,我使用备份/恢复方法将数据库从 SQL Server 2005 迁移到 SQL Server 2008 R2,一切顺利,没有产生任何错误。
我可以通过 SQL Server Management Studio 使用管理员用户下的 NT 身份验证登录 SQL Server 2008 并查看表、运行选择语句等,管理员用户是我迁移的数据库的所有者。
问题是,当我使用 NT 身份验证以不同的用户名登录 SQL Server 时,我无法运行选择语句或查看表、视图、存储过程或任何内容。
例如,每当我运行 select 语句时,我都会收到错误
对对象“AAPUsers”、数据库“PINT”、模式“dbo”的 SELECT 权限被拒绝。
当我尝试展开表树时出现错误
对对象“extended_properties”、数据库“mssqlsystemresource”、架构“sys”的 SELECT 权限被拒绝。(Microsoft SQL Server,错误:229)
我已尝试授予其他用户对我能找到的所有内容的完全权限,但问题仍然存在。
我发现,如果我创建一个 SQL Server 用户并以该用户身份登录并授予他们 db_datareader 和 db_datawriter 对数据库的访问权限,那么一切都会正常工作,只是当我使用 NT 身份验证时。
我尝试授予域用户(例如域/用户)上述权限,但问题并未得到解决。如果我将域用户设为数据库的所有者,那么一切就都正常了,正如人们所期望的那样。
我还在 SQL Server 2005 上创建了一个包含 1 个表的测试数据库,并使用相同的备份/恢复方法将其迁移到 2008,一旦我授予我的域用户 db_datareader 和 db_datawriter 访问权限,它就可以正常工作,所以它与那个特定的数据库有关,但我可以弄清楚。
问题似乎出在 NT 身份验证用户身上,我确信这只是我需要做的一些简单的事情。
我已经尝试了所有能想到的方法,但是已经没有其他选择了。
答案1
验证登录名(服务器级别)/用户(数据库级别)之间的映射没有问题。此类迁移的一个常见错误是管理员移动数据库,但忘记了新实例上不存在用户映射的登录名。