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


132

我尝试使用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

下一个erorr弹出:

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

问题是PC的名称已更改为“ DevPC”,我也在更新脚本中对此进行了更改,但仍然是相同的错误15404。

我该如何解决这个烦人的错误?


4
从另一台计算机还原备份时,也会遇到此问题。
蒂姆·阿贝尔

从另一台计算机还原数据库时,可以通过运行两个命令来修复此错误:1)alter authorization on database::[db_name] to [sa],然后运行2)再次运行相同的命令,并[sa]在还原后立即替换为拥有数据库的用户。
James L.

Answers:


182

您应该考虑使用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 sp_dropserver @server = N'old server name';
GO
EXEC sp_addserver @server = N'DevPC', @local = N'local';
GO

它显示:“ WIN-NDKPHUPPNFL”我使用了您的sql语句,它可以工作...但是此设置正确吗?还是我需要做更多其他事情?
Rookian'1

好吧,这确实取决于。如果您需要数据库由Windows域/工作组用户拥有,那么可能还有更多工作要做。我个人认为这是有问题的。:也许读这首sqlblog.com/blogs/tibor_karaszi/archive/2009/12/30/...
阿龙贝特朗

1
sa如果您禁用了SQL身份验证,将其设置为有什么问题吗?
蒂姆·阿贝尔2014年

@AaronBertrand嗨,我有一个问题。默认情况下,如果我们创建数据库,数据库所有者将设置为当前Windows用户,并且当前Windows用户也是管理员。为什么我们需要将其更改为Sql Authentication Login。确实,我无法理解此错误。如果我们将其更改为sa登录,那么它将起作用。但是管理员Windows登录名也是系统管理员。您能帮忙吗?
UfukSURMEN

我还原了一堆数据库,尽管每个数据库的属性都显示了一个有效的用户,但所有数据库都在OP的问题中显示了错误。我使用了第一个命令将其更改为[sa],然后又将其更改回原来的用户名,中提琴不再出现错误。不确定为什么数据库还原未正确设置数据库所有者...
James

208

在SQL Server Management Studio中,请执行以下操作:

  1. 右键单击数据库,选择属性
  2. 转到选项页面
  3. 在右侧的“兼容性级别”下拉列表中,选择“ SQL Server 2005(90)” 3-1。如果收到可比性错误,请选择“ SQL Server 2008”。
  4. 转到文件页面
  5. 在所有者文本框中输入“ sa”。5-1或单击省略号(...)并选择合法的所有者。
  6. 点击确定

完成此操作后,您现在将可以访问数据库图。

在此处输入图片说明


2
有什么理由为什么数据库不应该拥有所有者?我正在进入其他人的产品数据库,并且没有所有者设置。这是故意的吗?(没有人会知道)。
杰森·克莱班

数据库应具有所有者。选择“ sa”而不是合法的所有者只是解决上述错误的一种简单选择。但是选择一个合法的所有者也可以解决这个问题。
Lesly Revenge 2014年

3
有人可以解释在这些步骤中更改兼容性级别的目的吗?仅将文件下的所有者设置为“ sa”对我来说就足够了(即使我没有启用sql auth,也很奇怪)。
蒂姆·阿贝尔

这对我有用。我确实需要从数据库名称>安全性中删除我的用户。
Gezim 2015年

这对我有效,在SQL Server 2017上使用Management Studio 17.9,而无需执行步骤1
Giorgio Barchiesi

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

有用。


5

在所有者文本框中输入“ SA”而不是“ sa”。这对我有用。


5

我有同样的问题。
我想查看我上班当天在家里创建的图表。但是我不能因为这个信息。
我发现数据库的所有者是我的计算机的用户-如预期的那样。但是由于该计算机位于公司的域中,并且我没有连接到公司的网络,因此数据库无法解析所有者。

因此,我要做的就是将所有者更改为本地用户,并且成功了!!
希望这对某人有帮助。

您可以通过右键单击数据库,属性,文件,所有者来更改用户


3

这为我解决了。它设置在数据库属性窗口的“文件”部分下找到的所有者,并由Management Studio编写脚本。

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

根据sp_changedbowner文档,现在不建议使用。

根据以色列的回答。亚伦的答案是对此不予建议的变体。


3

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

在页面左侧选择文件

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

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


0

我刚刚经历过。我已经阅读了本页上的建议以及SQL Authority的建议(这是同一件事),但以上方法均无效。

最后,我删除了该帐户并重新创建(使用相同的用户名/密码)。就这样,所有问题都消失了。

可悲的是,这意味着我不知道出了什么问题,所以我无法再分享其他任何东西。


0

1.右键单击您的数据库,2.然后选择属性。3.如果要使用Microsoft sql 2008,请在兼容性级别中选择选项sql 2008 [100]。

4.然后选择文件并将(sa)写入所有者的文本框中

100%为我工作。


0

解决此问题的一种简便方法是右键单击数据库名称,选择“新建查询”,键入“ exec sp_changedbowner'sa'”并执行查询。那你会很好的。



0

只需要在查询编辑器中执行它即可:ALTER AUTHORIZATION ON DATABASE :: YourDatabase TO [domain \ account];


-3

真正的问题是默认所有者(dbo)根本没有映射到它的登录名。当我尝试将sa登录名映射到数据库所有者时,我收到了另一个错误,指出“用户,组或角色'dbo'已经存在...”。不过,如果您尝试使用此代码,它将可以正常工作:

EXEC sp_dbcmptlevel'yourDB','90';

在DATABASE :: yourDB上更改授权以“ yourLogin”

使用[yourDB]

以用户身份执行= N'dbo'REVERT


-3

右键单击数据库,然后选择属性。如果要使用Microsoft sql 2008,请选择兼容性级别中的选项,而不是2008,请选择sql 2005 [90],而不是2008。然后选择文件并在所有者的文本框中写入(sa)。它可能会工作

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.