Le schéma dbo doit-il être évité?

29

En ce qui concerne le schéma dbo:

  • Est-il recommandé d'éviter d'utiliser le schéma dbo lors de la création d'objets de base de données?
  • Pourquoi le schéma dbo devrait-il être évité ou devrait-il l'être?
  • Quel utilisateur de base de données doit posséder le schéma dbo?
jrara
la source
Un consultant a déclaré qu'il est recommandé d'éviter le schéma dbo et de toujours créer des schémas définis par l'utilisateur et d'affecter des objets à ces schémas.
jrara
Je trouve cette déclaration aussi d'Alexander Kuznetsov dans les commentaires de ce blog post :
jrara
Oui, évitez-le maintenant. dba.stackexchange.com/a/4109/630 et dba.stackexchange.com/q/8511/630 et stackoverflow.com/q/6502222/27535 @JNK: FYI pour vous aussi
gbn

Réponses:

22

Cela peut être une bonne pratique car lorsque d'autres utilisateurs utilisent la base de données, vous souhaitez pouvoir limiter leur accès avec des schémas. Par exemple, dans une base de données, vous disposez des tableaux suivants.

HR.Payhist
HR.Payscale
HR.Jobdesc
IT.username
IT.useraccesslevel
ENG.jobsite
ENG.trainings

En tant que directeur des ressources humaines, je peux accéder à tout dans le HRschéma, en tant que ITdirecteur, je peux voir les noms d'utilisateur et les niveaux d'accès des employés. Le Engineeringdépartement peut voir quels sites d'emploi sont actifs, etc. Si dbo était le schéma défini pour toutes les tables, j'aurais plus de mal à segmenter mes données et à fournir des rôles d'accès.

L'idée, je crois, dans SQL Server est d'offrir un produit accessible et interrogé par différents services. En réalité, seuls les DBA / DBDev accèdent réellement à la base de données et elle ne stocke généralement que les données d'application.

Il aide également à la lisibilité et à la gérabilité. À première vue, je peux facilement identifier quelle table contient quelles données et comment les données sont séparées.

Personnellement, je préfère définir les schémas comme une pratique générale. N'oubliez pas que le schéma est grec pour le plan, avoir une structure de schéma présentée vous aide à planifier et à identifier les données.

Ryan
la source
6

Je pense que cela dépend vraiment de la préférence des utilisateurs car il n'y a pas de véritable raison technologique pour le faire. En fait, par souci de simplicité, je dis toujours utiliser dbo à moins que vos exigences de sécurité ne le stipulent autrement. Bien sûr, vous pouvez toujours le faire uniquement à des fins d'organisation.

Eric Humphrey - lotsahelp
la source
1
100% derrière cette approche. Je laisse souvent les tables "de base" dans le schéma dbo pour plus de simplicité et je commence à en ajouter au besoin. Généralement, le premier schéma séparé que j'ajoute est "Stage" ou "Staging", pour regrouper séparément mes tables de transfert. Un autre exemple serait l'ajout de données à partir d'une source externe, selon Twitter. Au lieu de préfixer toutes les tables (par exemple TwitterAccount, TwitterStatus etc.), je vais créer un schéma "Twitter".
robopim
5

Si quoi que ce soit, dbo doit être évité car c'est la valeur par défaut pour SQL Server, il n'est également pas du tout descriptif. Comme tous les autres noms par défaut, comme il est connu à l'avance, cela rend la vie d'un pirate beaucoup plus facile (bien que s'ils sont au point où ils essaient juste de comprendre le nom de votre schéma, vous êtes probablement déjà borked).

Là où je travaille, nous utilisons des schémas pour diviser la base de données en sections logiques et attribuer des autorisations aux schémas.

Par exemple, nous pouvons avoir un système d'inventaire avec une base de données. Les tables principales peuvent être dans le schéma inv. Si nous importons quelque chose dans la base de données, un schéma de transfert serait utilisé dans le cadre du processus d'importation. Si nous avons des procédures stockées système auxquelles les utilisateurs n'ont pas besoin d'accéder, nous les mettons dans un schéma sp.

DForck42
la source
1
+1 pour "l'éviter car c'est la valeur par défaut". Force les utilisateurs à y réfléchir au moins un peu lorsqu'ils créent un objet.
BradC
4

Ce n'était pas auparavant la meilleure pratique car les schémas étaient masqués avant SQL 2005, tout était placé dans le schéma dbo. L'équipe SQL Server l'a présentée comme une meilleure pratique et a publié un article à ce sujet: Meilleures pratiques SQL Server - Implémentation des schémas d'objet de base de données

En ce qui concerne votre autre question concernant qui devrait en être propriétaire: le schéma dbo appartient au compte utilisateur dbo.

Shawn Melton
la source