O principal do banco de dados possui um esquema no banco de dados e não pode ser descartado.

28

Estou tentando excluir uma entidade do banco de dados, mas não pode porque ela possui um esquema. Quando vou editar o usuário, no entanto, a caixa para desmarcar os esquemas é azul e irremovível. Como posso remover o principal desses esquemas?

rsteckly
fonte

Respostas:

31

Experimente o T-SQL para fazer isso:

alter authorization
on schema::YourSchemaName
to dbo
go

drop user TheUserYouWantToDelete
go

Você não pode descartar um principal que seja o proprietário do esquema; portanto, isso ALTER AUTHORZATIONaltera o esquema de propriedade (eu usei YourSchemaName, mas obviamente substituo pelo esquema de propriedade do banco de dados) para dbo(da mesma forma, você pode alterar a propriedade para qualquer objeto de que precise meio Ambiente). Isso permitirá que você descarte o usuário que possui o esquema anteriormente (por exemplo, fins que eu usei TheUserYouWantToDelete, mas esse será o agora não proprietário que você deseja excluir).

Thomas Stringer
fonte
Ok, então isso funcionou. Estou um pouco confuso sobre o porquê, no entanto. Por que preciso autorizar o esquema para outro esquema? Talvez eu necessidade de rever esquemas ...
rsteckly
11
@rsteckly Simplificado, autorização = propriedade. Se você pudesse excluir o usuário que possui o esquema, o esquema não seria válido, porque o proprietário não existe mais. Imagine que você pode excluir um cliente que fez um pedido. O que significa a Identificação do Cliente na tabela Pedidos, se não houver mais um Cliente para o qual aponte? Para onde devo enviar o pedido?
Aaron Bertrand
Desculpe, meu exemplo não foi bem explicado. Não estamos alterando a autorização para o dboesquema, estamos alterando a autorização para o dboprincipal. Isso poderia ter sido qualquer objeto de banco de dados.
Thomas Stringer
30

A maneira T-SQL funciona. Graças a http://zarez.net/?p=179 , encontrei a maneira SSMS de fazer isso (interface do usuário).

Para alterar o proprietário do esquema do Sql Server Management Studio:

Expand your database -> Security -> Schemas

Nos Detalhes do Pesquisador de Objetos, você pode ver uma lista dos esquemas e dos proprietários:

insira a descrição da imagem aqui

Se você não souber quais esquemas o Usuário possui, verifique as propriedades do Usuário.

insira a descrição da imagem aqui

Abra as propriedades do esquema que o Usuário possui e clique em "Pesquisar" para encontrar um novo proprietário. Se você não conhece o novo proprietário, pode "Procurar" por um.

Properites -> Search -> Browse

e você pode alterar o proprietário do esquema para dbo (ou quem for mais apropriado).

insira a descrição da imagem aqui

woodvi
fonte
11
A maneira T-SQL é muito melhor e flexível. Fazê-lo através da GUI tem (é) sempre uma dor!
Kin Shah
Sou a favor da maneira T-SQL, também porque pode ser usada em scripts.
woodvi
2
Nota: F7 é o atalho para exibir detalhes se ele não está chegando
Simon_Weaver