从数据库属性对话框的“文件”页面更改数据库所有权时出错


10

我已还原数据库,并以db_owner的身份创建了一个新用户(与我登录时使用的用户相同)。现在,当我想查看数据库图时出现错误

无法安装数据库图支持对象,因为该数据库没有有效的所有者。要继续,请首先使用“数据库属性”对话框的“文件”页面或“更改授权”语句将数据库所有者设置为有效的登录名,然后添加数据库支持对象

现在,当我尝试从数据库属性的“文件”页面更改所有权时,出现以下错误:

Set Owner因数据库'ABC'失败。(Microsoft.SqlServer.SMO)其他信息:SMO中发生异常建议的新数据库所有者James-PC \ James被映射为该数据库中的用户James。参数名称:James-PC \ James“

请帮助我解决此问题,以便从另一个系统还原数据库备份后,可以在这台计算机上查看数据库图。

Answers:


8

数据库所有者是sys.server_principals中拥有数据库的登录名,该登录名由数据库的SID定义。还原后,很容易出现这样的情况:用于还原数据库的登录名不是该数据库的先前所有者。(当数据库在服务器之间移动时,更可能发生这种情况。)

因此,您可能会遇到三种设置问题

  1. 数据库owner_sid不等于数据库的db_owner sid。您可以通过以下方法对数据库ABC进行比较:

    从sys.databases中选择owner_sid,其中name ='ABC';

    来自ABC.sys.database_principals的SELECT sid,其中name ='dbo';

  2. 接下来,您将收到一条消息,指出您建议的数据库owner_sid也作为用户存在于sys.database_principals中。我们从有关映射建议的所有者的错误消息中知道这一点。

因此,您的步骤是:

 USE ABC;
 DROP USER James;
 ALTER AUTHORIZATION ON DATABASE::ABC TO [James-PC\James];

您删除了不需要的用户,因为您将其设为dbo。一旦这一切都解决了,那么您的登录名就可以成为数据库的所有者。

编辑:您还可以使用SSMS从ABC数据库中删除James用户。然后,您可以返回到数据库属性“文件”选项卡以设置数据库所有者。(对不起,我倾向于考虑脚本。)


1
有趣的是,在Management Studio中,以dbo进行的登录不会出现在YOUR_DB / Security / Users下,
joedotnot

-3
  1. 右键单击数据库
  2. 属性
  3. 选择文件
  4. 正确/设置所有者(到yourpc \ you,或通过单击“ ...”浏览并选择)

这在SQL Server Management Studio v17.1中为我工作


2
我认为这确实不适用于他们。
dezso
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.