2

我有一个 MS SQL 2000 数据库,它是从公共服务器备份并在测试位置恢复以进行升级测试。问题是在公共服务器上具有访问权限的用户在测试服务器上不存在,现在所有表都以该用户名作为前缀(这需要更改对这些表的所有查询!)

有什么快速的方法来解决这个问题吗?我已经更改了数据库所有者,但这没有帮助。

4

2 回答 2

1

创建登录名和用户,但从 sysusers 中找出 SID

EXEC sp_addlogin 'TheLogin', 'ThePassword', @sid = ???
EXEC sp_adduser 'TheLogin','TheUser'

注意:SQL Server 2000 所以不能使用 CREATE LOGIN 或 CREATE USER

于 2010-02-23T07:58:40.417 回答
1

好的,找到答案 - 必须将 OBJECT 所有者更改为 DBO,从而无需在 SQL 脚本/查询中为对象的引用添加前缀 - 在这种情况下,对象是数据库表

这是一个脚本,它将更改数据库中对象的所有者(不是我自己的代码)

DECLARE @currentObject nvarchar(517)
DECLARE @qualifiedObject nvarchar(517)
DECLARE @currentOwner varchar(50)
DECLARE @newOwner varchar(50)

SET @currentOwner = 'old_owner'
SET @newOwner = 'dbo'

DECLARE alterOwnerCursor CURSOR FOR
SELECT [name] FROM dbo.sysobjects 
WHERE xtype = 'U' or xtype = 'P'
AND LEFT([name], 2) <> 'dt'
OPEN alterOwnerCursor
FETCH NEXT FROM alterOwnerCursor INTO @currentObject
WHILE @@FETCH_STATUS = 0
BEGIN
   SET @qualifiedObject = CAST(@currentOwner as varchar) + '.' + CAST(@currentObject as varchar)
   EXEC sp_changeobjectowner @qualifiedObject, @newOwner
   FETCH NEXT FROM alterOwnerCursor INTO @currentObject
END
CLOSE alterOwnerCursor
DEALLOCATE alterOwnerCursor
于 2010-02-23T07:58:52.643 回答