私はこの問題に遭遇しました。データベースの所有者をacct1
に変更しようとしています。ただし、その際に次のエラーメッセージが表示されます。
提案された新しいデータベース所有者はすでにデータベースのユーザーです
acct1
ユーザーを削除してからデータベース所有者を変更することが1つの解決策であることはわかっていますが、このデータベース内のすべてのテーブルはacct1
スキーマによって所有されているため、これを行うことはできません。
どうすればこれを回避できますか?
スキーマの所有権をdbo
に簡単に変更できます。その後、ユーザーを削除し、ALTER AUTHORIZATION
を使用してそれらを再び追加できるようにする必要があります。
ALTER AUTHORIZATION ON SCHEMA::[schema_they_own] TO dbo;
DROP USER [user_name];
ALTER AUTHORIZATION ON DATABASE::[database_name] TO login_name;
これで、これらはデータベースのdbo
ユーザーになります(スキーマの所有権は自動的に付与されます)。
複数のスキーマを変更する必要がある場合があります。動的SQLを使用してこれを行うスクリプトを生成できます。
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += N'ALTER AUTHORIZATION ON SCHEMA::'
+ QUOTENAME(s.name) + N' TO dbo;
'
FROM sys.schemas AS s
INNER JOIN sys.database_principals AS dp
ON s.principal_id = dp.principal_id
WHERE dp.name = N'database user name';
PRINT @sql;
-- EXEC sys.sp_executesql @sql;
生成されたコマンドに満足している場合は、出力をコピーして貼り付けて実行するか、EXEC
のコメントを外して再度実行できます。