Я подключил базу данных и попытался изменить владельца на действительный логин.
Я использовал оператор: ALTER AUTHORIZATION ON database :: my_db_name TO "sa". Свойства базы данных показали, что новым владельцем был «sa», однако я все еще получал ошибки разрешений для неограниченных сборок CLR (0x80FC80F1, 0x8013150A), что-то о проблемах доверия сборок.
Я решил проблему, используя вместо этого инструкцию: EXEC sp_changedbowner 'sa'; сменить владельца базы данных.
У меня вопрос, в чем разница между этими двумя методами смены владельца базы данных. Они эквивалентны? Мне кажется очевидным, что sp_changedbowner делает что-то большее / исправляет то, что не делает оператор alter authorization.
Если вам интересно ... перед тем, как исправить что-то с помощью sp_changedbowner, я попробовал:
Я считаю ALTER_AUTHORIZATION
и sp_changedbowner
оба могут изменить владельца объекта базы данных. Разница между командами, конечно же, в том, что ALTER_AUTHORIZATION
может изменить другие вещи (например, владение таблицами), тогда как sp_changedbowner
просто для смены владельца базы данных.
Однако указанное вами поведение звучит очень странно. Можете ли вы воспроизвести это?
В вашем списке я не считаю настройку базы данных заслуживающей доверия, поэтому я предполагаю, что вы забыли этот шаг:
ALTER DATABASE my_db_name SET TRUSTWORTHY ON;
А может и нет ...
Проверяем с помощью этой статьи: http://support.microsoft.com/kb/918040 похоже, что они действительно предлагают использовать sp_changedbowner вместо ALTER AUTHORIZATION. Но факт в том, что он делает то же самое (sp_changedbowner вызывает ALTER AUTHORIZATION под прикрытием). Разница в том, что он также удаляет «псевдонимы» для пользователя dbo (в любом случае устаревшая функция), а также принудительно устанавливает контрольную точку базы данных. Этот последний кусок может быть тем, что вы ищете.