数据库图支持对象无法安装...没有有效所有者。

136

我试图使用SQL Server 2008创建数据库图表,但是出现了以下错误:

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

接下来我尝试了以下方法:

EXEC sp_dbcmptlevel 'Ariha', '90';
GO
ALTER AUTHORIZATION ON DATABASE::Ariha TO [WIN-NDKPHUPPNFL\Administrator]
GO
USE Ariha
GO
EXECUTE AS USER = N'dbo' REVERT
GO

下一个错误提示如下:

Msg 15404,级别16,状态11,行1 无法获取有关Windows NT组/用户“WIN-NDKPHUPPNFL\Administrator”的信息,出现错误代码0x534。

问题在于计算机名称已更改为“DevPC”,我也在更新脚本中进行了更改,但仍然出现同样的错误15404。

我该怎么做才能解决这个烦人的错误?


4
当你从不同的设备恢复备份时,也会出现这个问题。 - Tim Abell
1
当你从另一台机器恢复数据库时,你可以通过运行两个命令来修复这个错误:1)alter authorization on database::[db_name] to [sa],然后2)再次运行相同的命令,并将[sa]替换为在恢复后立即拥有数据库的用户。 - James L.
14个回答

218
在SQL Server管理工具中,按以下步骤操作:
  1. 右键单击您的数据库,选择属性
  2. 转到“选项”页面
  3. 在右侧下拉菜单中标记为“兼容性级别”,选择“SQL Server 2005(90)” 3-1. 如果出现兼容性错误,请选择“SQL Server 2008”。
  4. 转到“文件”页面
  5. 在所有者文本框中输入“sa”。 5-1或点击省略号(...)并选择一个合适的所有者。
  6. 点击确定
完成上述步骤后,您现在可以访问数据库图表了。

enter image description here


2
一个数据库为什么不应该有所有者?我要进入别人的产品数据库,但没有设置所有者。这是故意的吗?(客户那里也没有人知道)。 - Jason Kleban
1
数据库应该有一个所有者。选择“sa”而不是合法的所有者只是为了修复上述错误而做出的简单选择。但选择一个合法的所有者也可以解决问题。 - Lesly Revenge
3
有人能解释一下在这些步骤中更改兼容性级别的目的吗?仅将文件的所有者设置为“sa”对我来说已经足够了(尽管我并没有启用SQL身份验证,奇怪)。 - Tim Abell
这对我有用。不过,我确实需要从“数据库名称”>“安全性”中删除我的用户。 - Gezim
这对我有效,在SQL Server 2017上,使用Management Studio 17.9,无需进行第一步。 - Giorgio Barchiesi
显示剩余3条评论

190

您应该考虑使用SQL身份验证账户来拥有数据库;这样,您就不必担心帐户的进出、数据库或实例移动到不同的服务器以及下一个PC名称更改。我有几个系统在其中我们使用:

ALTER AUTHORIZATION ON DATABASE::Ariha TO [sa];

或者如果你想将所有权更改为本地管理员账户,那么应该是:

ALTER AUTHORIZATION ON DATABASE::Ariha TO [DevPC\Administrator];

将机器重命名为 DevPC 后,本地账户被删除,原来的账户名称为 WIN-ND...\Administrator。这也使得当前数据库的所有者失效。

如果 SELECT @@SERVERNAME; 不准确(应该显示 DevPC),则为了确保在 SQL Server 中服务器重命名已生效,您可能还需要执行以下操作:

EXEC sys.sp_dropserver @server = N'old server name';
GO
EXEC sys.sp_addserver @server = N'DevPC', @local = N'local';
GO

我使用了你的SQL语句,它可以正常工作...但是这个设置是否正确,还需要做其他的事情吗?它显示:"WIN-NDKPHUPPNFL"。 - Rookian
这真的取决于情况。如果您需要将数据库归属于Windows域/工作组用户,则可能需要更多的工作。就个人而言,我认为这很棘手。也许先阅读一下这篇文章:https://sqlblog.org/blogs/tibor_karaszi/archive/2009/12/30/using-sa-as-owner-for-jobs-and-databases.aspx - Aaron Bertrand
1
如果 SQL 身份验证被禁用,将其设置为“sa”会有任何问题吗? - Tim Abell
@AaronBertrand 您好,我有一个问题。默认情况下,如果我们创建一个数据库,则数据库所有者将设置为当前 Windows 用户,如果当前 Windows 用户也是管理员。为什么我们需要将其更改为 Sql Authantication 登录。实际上,我无法理解这个错误。如果我们将其更改为 sa 登录,则可以正常工作。但管理员 Windows 登录也是系统管理员。您能帮忙吗? - yigitt
我恢复了一堆数据库,它们都显示了OP问题中的错误,尽管每个数据库的属性都显示了一个有效的用户。我使用第一个命令将其更改为[sa],然后将其改回到之前所说的用户,结果没有出现错误。不确定为什么数据库还原没有正确设置数据库所有者... - James L.

8
USE [ECMIS]
GO
EXEC dbo.sp_changedbowner @loginame = N'sa', @map = false
GO

它起作用了。


5
在所有者文本框中输入"SA"而不是"sa"。这对我起了作用。

5
我曾经遇到过同样的问题。
我想在家里查看我在工作中创建的图表,但是由于这个消息的原因,我无法查看。
后来我发现数据库的所有者是我的电脑上的用户 - 正如预期。但由于计算机连接的是公司域,而我没有连接到公司的网络,所以数据库无法解析所有者信息。
所以我做的是将所有者更改为本地用户,这样就可以了!!
希望这能帮助到有需要的人。
您可以通过右键单击数据库, 属性, 文件, 所有者来更改用户。

5

选择你的数据库 - 右键单击 - 选择属性

在页面左侧选择“文件”

在所有者框中,选择带有三个点(...)的按钮

现在选择用户“sa”,然后点击“确定”


3
这对我很有帮助。它设置了在数据库属性窗口的“文件”部分找到的所有者,并且是由管理工作室脚本化的。
USE [your_db_name]
GO
EXEC dbo.sp_changedbowner @loginame = N'sa', @map = false
GO

根据 sp_changedbowner 文档,此方法已被废弃。
根据以色列的回答,Aaron 的回答是不废弃的变体。

0
一个更简单的解决方法是右键单击数据库名称,选择“新建查询”,输入“ exec sp_changedbowner 'sa' ”并执行查询。然后你就可以开始了。

0

您必须以管理员身份登录,右键单击Microsoft SQL Server Management Studio并选择“以管理员身份运行”


0

只需要在查询编辑器中执行以下命令 ALTER AUTHORIZATION ON DATABASE::YourDatabase TO [domain\account];


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接