在SQL Server 2008中更改数据库所有者; CLR问题取决于使用的方法?

我附加了一个数据库,并尝试将所有者更改为有效的login名。

我使用了语句:ALTER AUTHORIZATION ON database :: my_db_name TO“sa”。 数据库属性显示新的所有者是'sa',但是我仍然获得了不受限制的CLR程序集(0x80FC80F1,0x8013150A)的权限错误,这是关于程序集信任问题的。

我解决了这个问题,而不是使用语句:EXEC sp_changedbowner'sa'; 更改数据库所有者。

我的问题是,这两种更改数据库所有者的方法有什么区别。 他们是否等同? 在我看来很清楚,sp_changedbowner正在做一些更正确的事情,即alter authorization语句没有做的事情。


如果你有兴趣…在修改sp_changedbowner之前,我试过了:

  • 将数据库的可信赖性设置为ON; 其实我这样做了几次; 我知道这是要求运行不受限制的,未签名的自定义CLR程序集
  • 把每个CLR大会的主人换成dbo,因为主人是空白的,但显然dbo已经是主人了,在SSMS里总是空白。
  • 将每个CLR程序集的所有者更改为其他东西,但这不起作用,因为具有相关程序集的程序集似乎总是需要相同的所有者; 但是不可能通过所提供的接口同时改变所有者。
  • 把GRANT UNSAFE ASSEMBLY称为[sa]; 显然你不能授予该内置帐户的权限,以及一些其他的; 他们已经有了许可
  • 拨打GRANT UNSAFE ASSEMBLY到[NT AUTHORITY \ NETWORK SERVICE](汇编中的账户调用方法); 没有错误,但似乎没有实现任何东西(也许改变了错误号码?消息从来没有改变虽然)。
  • …可能还有其他一些我不记得的东西。

在你的列表中,我没有看到将数据库设置为值得信赖,所以我认为你忘记了这一步:

ALTER DATABASE my_db_name SET TRUSTWORTHY ON; 

但也许不是…

检查这篇文章: http : //support.microsoft.com/kb/918040看来,他们确实sugest使用sp_changedbowner而不是ALTER AUTHORIZATION。 但事实是,它完全一样的东西(sp_changedbowner在下面调用了ALTER AUTHORIZATION)。 不同之处在于,它也会删除dbo用户的“别名”(反正是弃用的function),并强制数据库的检查点。 最后一块可能是你正在寻找的那个。

我相信ALTER_AUTHORIZATIONsp_changedbowner都可以改变数据库对象的所有权。 当然,命令之间的区别是ALTER_AUTHORIZATION可以改变其他的东西(比如表的所有权),而sp_changedbowner只是用来改变数据库的所有者。

你所performance的行为听起来很奇怪,但。 你可以复制它吗?