我附加了一个数据库,并尝试将所有者更改为有效的login名。
我使用了语句:ALTER AUTHORIZATION ON database :: my_db_name TO“sa”。 数据库属性显示新的所有者是'sa',但是我仍然获得了不受限制的CLR程序集(0x80FC80F1,0x8013150A)的权限错误,这是关于程序集信任问题的。
我解决了这个问题,而不是使用语句:EXEC sp_changedbowner'sa'; 更改数据库所有者。
我的问题是,这两种更改数据库所有者的方法有什么区别。 他们是否等同? 在我看来很清楚,sp_changedbowner正在做一些更正确的事情,即alter authorization语句没有做的事情。
如果你有兴趣…在修改sp_changedbowner之前,我试过了:
在你的列表中,我没有看到将数据库设置为值得信赖,所以我认为你忘记了这一步:
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_AUTHORIZATION和sp_changedbowner都可以改变数据库对象的所有权。 当然,命令之间的区别是ALTER_AUTHORIZATION可以改变其他的东西(比如表的所有权),而sp_changedbowner只是用来改变数据库的所有者。
你所performance的行为听起来很奇怪,但。 你可以复制它吗?