パブリックサーバーからバックアップされ、アップグレードテストのためにテスト場所に復元されたMSSQL2000データベースがあります。問題は、パブリックサーバーへのアクセス許可を持っていたユーザーがテストサーバーに存在せず、すべてのテーブルにそのユーザー名のプレフィックスが付けられることです(これらのテーブルに対するすべてのクエリを変更する必要があります!)
これを修正する簡単な方法はありますか?データベースの所有者を変更しましたが、これは役に立ちませんでした。
パブリックサーバーからバックアップされ、アップグレードテストのためにテスト場所に復元されたMSSQL2000データベースがあります。問題は、パブリックサーバーへのアクセス許可を持っていたユーザーがテストサーバーに存在せず、すべてのテーブルにそのユーザー名のプレフィックスが付けられることです(これらのテーブルに対するすべてのクエリを変更する必要があります!)
これを修正する簡単な方法はありますか?データベースの所有者を変更しましたが、これは役に立ちませんでした。
ログインとユーザーを作成しますが、sysusersからSIDを見つけます
EXEC sp_addlogin 'TheLogin', 'ThePassword', @sid = ???
EXEC sp_adduser 'TheLogin','TheUser'
注:SQL Server 2000では、CREATELOGINまたはCREATEUSERを使用できません。
わかりました。答えが見つかりました。オブジェクトの所有者を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