我正在尝试使用以下命令将dll加载到MSSQL中:
USE dbname
GO
CREATE ASSEMBLY foo
FROM 'C:\foo\foo.dll'
WITH PERMISSION_SET = UNSAFE
GO
我收到的错误是:
Msg 33009, Level 16, State 2, Line 2 The database owner SID recorded in the master database differs from the database owner SID recorded in database 'dbname'. You should correct this situation by resetting the owner of database 'dbname' using the ALTER AUTHORIZATION statement.MSDN真的没有告诉我有关错误的信息,而不是错误告诉我自己。
我浏览了整个互联网并得出结论,只有任何人做过的事情都是为了避免这种情况:
use dbname
go
EXEC dbo.sp_changedbowner @loginame = N'sa', @map = false
但是改变主人真的是避免这个错误的唯一方法吗?为什么我必须这样做,还有另外一种方法吗?在进入并盲目更改所有者之前,我想了解有关此错误的更多信息。
答案 0 :(得分:3)
我遇到了完全相同的问题,对我来说唯一的解决办法是更改所有者,然后再将其更改回来。
问题是用户既是每个数据库又是每个服务器。发生的事情是每个数据库用户的用户名与每个服务器用户的用户名相同,但是他们的SID不匹配,因此它认为它可能是另一个人。
答案 1 :(得分:1)
您可能想要检查的内容:如果您以(作为数据库创建数据库)的用户也被映射到“model”数据库,那么将在“用户”选项卡下为该用户创建该用户数据库。这意味着实例的“安全”选项卡下有凭据,而数据库的本地用户则有凭据。要立即解决问题,请将用户从本地数据库中删除 - 然后可以将其设置为所有者(来自实例凭据):
删除用户[MyUser]; exec sp_changedbowner [MyUser]
要长期解决此问题,请从“模型”数据库(安全/登录/ [MyUser]属性 - 用户映射)取消映射用户。