Le principal de la base de données possède un schéma dans la base de données et ne peut pas être supprimé

28

J'essaie de supprimer un principal de la base de données, mais je ne le peux pas car il possède un schéma. Cependant, lorsque je modifie l'utilisateur, la case pour décocher les schémas est bleue et inamovible. Comment supprimer le principal de ces schémas?

rigoureusement
la source

Réponses:

31

Essayez le T-SQL pour ce faire:

alter authorization
on schema::YourSchemaName
to dbo
go

drop user TheUserYouWantToDelete
go

Vous ne pouvez pas supprimer un principal qui est un propriétaire de schéma, donc les ALTER AUTHORZATIONmodifications du schéma appartenant (j'ai utilisé YourSchemaName, mais évidemment le remplacer par le schéma appartenant à votre base de données) à dbo(de même, vous pouvez changer la propriété en quel principal dont vous avez besoin dans votre environnement). Cela vous permettra de supprimer l'utilisateur propriétaire du schéma (par exemple à des fins que j'ai utilisées TheUserYouWantToDelete, mais ce sera le non-propriétaire que vous souhaitez supprimer).

Thomas Stringer
la source
D'accord, donc cela a fonctionné. Je suis cependant un peu confus quant à la raison. Pourquoi dois-je autoriser le schéma sur un autre schéma? Peut-être que je dois revoir les schémas ...
rsteckly
1
@rsteckly Simplified, autorisation = propriété. Si vous pouviez supprimer l'utilisateur propriétaire du schéma, le schéma ne serait pas valide, car le propriétaire n'existe plus. Imaginez que vous puissiez supprimer un client qui a passé une commande. Que signifie l'ID client dans le tableau Commandes s'il n'y a plus de client vers lequel il pointe? Où dois-je expédier la commande?
Aaron Bertrand
Désolé, mon exemple n'a pas été bien expliqué. Nous ne modifions pas l'autorisation au dboschéma, nous modifions l'autorisation au dboprincipal. Cela aurait pu être n'importe quel principal de la base de données.
Thomas Stringer
30

La méthode T-SQL fonctionne. Grâce à http://zarez.net/?p=179, j'ai trouvé le moyen SSMS de le faire (UI).

Pour changer le propriétaire du schéma à partir de Sql Server Management Studio:

Expand your database -> Security -> Schemas

Dans les détails de l'explorateur d'objets, vous pouvez voir une liste des schémas et des propriétaires:

entrez la description de l'image ici

Si vous ne savez pas quel (s) schéma (s) l'utilisateur possède, vérifiez les propriétés de l'utilisateur.

entrez la description de l'image ici

Ouvrez les propriétés du schéma que l'utilisateur possède et cliquez sur "Rechercher" pour trouver un nouveau propriétaire. Si vous ne connaissez pas le nouveau propriétaire, vous pouvez en rechercher un.

Properites -> Search -> Browse

et vous pouvez changer le propriétaire du schéma en dbo (ou celui qui est le plus approprié).

entrez la description de l'image ici

woodvi
la source
1
La méthode T-SQL est bien meilleure et flexible. Le faire via l'interface graphique a (est) toujours une douleur!
Kin Shah
Je suis tout à fait pour la méthode T-SQL, également parce qu'elle peut être utilisée dans des scripts.
woodvi
2
Remarque: F7 est le raccourci pour afficher les détails s'il ne s'affiche pas
Simon_Weaver