数据库主体在数据库中拥有一个架构,并且不能删除消息


28

我试图从数据库中删除主体,但是不能删除,因为它拥有架构。但是,当我去编辑用户时,取消选中模式的框为蓝色且不可移动。如何从这些架构中删除主体?

Answers:


31

尝试使用T-SQL执行此操作:

alter authorization
on schema::YourSchemaName
to dbo
go

drop user TheUserYouWantToDelete
go

您不能删除作为模式所有者的主体,因此将ALTER AUTHORZATION拥有的模式(我曾用过YourSchemaName,但显然用数据库中的拥有的模式代替了)dbo更改为(同样,您可以将所有权更改为您需要的任何主体环境)。这样一来,您就可以删除以前拥有模式的用户(例如,出于我以前使用的目的TheUserYouWantToDelete,但这将是您现在要删除的非所有者)。


好的,这可行。但是我对为什么有些困惑。为什么需要将模式授权给另一个模式?也许我需要回顾
一下

1
@rsteckly简化,授权=所有权。如果您可以删除拥有该模式的用户,则该模式将无效,因为所有者不再存在。想象一下,您可以删除下订单的客户。如果不再有指向的客户,那么“订单”表中的“客户ID”是什么意思?我应该在哪里发货?
亚伦·伯特兰

抱歉,我的示例没有得到很好的解释。我们没有将授权更改为dbo架构,而是将授权更改为dbo主体。那可能是任何数据库主体。
Thomas Stringer 2012年

30

T-SQL方式有效。感谢 http://zarez.net/?p=179, 我找到了执行此操作(UI)的SSMS方法。

要从Sql Server Management Studio更改架构所有者,请执行以下操作:

Expand your database -> Security -> Schemas

在“对象资源管理器详细信息”中,您可以看到模式和所有者的列表:

在此处输入图片说明

如果您不知道用户拥有什么架构,请检查用户的属性。

在此处输入图片说明

打开用户拥有的架构的属性,然后单击“搜索”以查找新的所有者。如果您不认识新的所有者,则可以“浏览”其中的一个。

Properites -> Search -> Browse

您可以将架构所有者更改为dbo(或最合适的人)。

在此处输入图片说明


1
T-SQL方式更好,更灵活。通过GUI进行操作总是很痛苦的!
金莎(Kin Shah)

我全都支持T-SQL方式,也因为它可以在脚本中使用。
woodvi

2
注意:F7是显示详细信息的快捷方式
Simon_Weaver
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.