Quel est le but de la base de données 'propriétaire'?


46

Aujourd'hui, alors que je tentais de résoudre un problème lié au service broker, j'ai découvert que le propriétaire de la base de données était la connexion Windows d'un employé qui avait quitté l'entreprise. Son identifiant avait été supprimé et les notifications de requêtes échouaient.

Soi-disant, la meilleure pratique pour y remédier est de faire de 'un' le propriétaire de la base de données. Nous l'avons changé et cela a vidé la file d'attente.

Ma question (très élémentaire): quel est le propriétaire de la base de données et quel est son but?


Comment avez-vous changé le propriétaire de la base de données en "sa"? Je suis un technicien SIG travaillant pour le gouvernement local. L'ancien technicien SIG a été licencié et très peu de gens ici en savent beaucoup sur le SIG. Je n'arrive pas à me donner la permission de modifier une base de données car je n'en suis pas le propriétaire. Comment changer de propriétaire?

Réponses:


53

Il existe une certaine confusion entre les concepts de base de données de 'dbo' (un utilisateur) et 'db_owner' (un rôle fixe) d'un côté et le concept d'instance de 'propriétaire de la base de données' de l'autre. Les 'dbo' et 'db_owner' sont souvent appelés 'propriétaires de bases de données'. Dans ce que vous demandez, vous parlez du propriétaire de la base de données en tant que principal du serveur propriétaire de la base de données.

La théorie est la suivante: tout ce sur quoi des autorisations peuvent être accordées est «sécurisable» . Tous les objets sécurisables ont un propriétaire. Le propriétaire d'un objet sécurisable a le contrôle absolu de celui-ci et ne peut se voir refuser aucun privilège. Niveau de l' instance sécurisables sont la propriété de serveur principaux (logins). Les objets sécurisables au niveau de la base de données appartiennent aux principaux utilisateurs (utilisateurs). Les directeurs sont de deux types: primaire (identité) et secondaire (membres). Les objets sécurisables au niveau du serveur appartiennent par défaut au principal du serveur actuellement connecté. Les objets sécurisables au niveau de la base de données appartiennent par défaut au principal de la base de données actuel, à l'exception des objets liés au schéma qui appartiennent par défaut au propriétaire du schéma. Tous les objets sécurisables prennent en charge la clause AUTHORIZATION au moment de la création pour appliquer un autre propriétaire.ALTER AUTHORIZATION peut être utilisé ultérieurement pour changer le propriétaire de tout objet sécurisable.

Étant donné que la base de données est sécurisable au niveau du serveur, il en résulte que le principal principal qui a émis l'instruction CREATE DATABASE en sera le propriétaire. C'est à dire. l'identifiant NT de l'employé décédé.

Votre question est donc vraiment " Pourquoi les sécurités ont-elles besoin d’un propriétaire? ". Parce que le propriétaire est la racine de la confiance. C'est le propriétaire qui accorde, refuse et révoque l'autorisation sur l'objet. Un système de sécurité peut-il être conçu sans propriétaires de objets sécurisables? Probablement que oui, mais il faudrait mettre en place un mécanisme pour remplacer le rôle joué par les propriétaires dans le modèle actuel. Par exemple, considérez que papa securables n’a pas de propriétaire (par exemple, au lieu de posséder un objet sécurisable, le créateur original se voit accorder le contrôle), il serait possible de créer un accès sécurisable et de révoquer son accès à tout le monde , y compris à lui-même. L'exigence d'un propriétaire contourne ce problème car un propriétaire ne peut pas s'isoler.

L’effet secondaire peu connu de CREATE DATABASE de la création d’une base sécurisable (la base de données) détenue par le login NT original en a beaucoup brûlé auparavant. Les règles sont les mêmes pour chaque élément sécurisable, mais certains facteurs aggravent les problèmes rencontrés par le propriétaire de DATABASE:

  • les autres objets sécurisables au niveau du serveur (noeud final, rôle du serveur, connexion) sont très rarement utilisés, déplacés, etc.
  • Les objets sécurisables au niveau de la base de données finissent généralement par appartenir à dbo(le principal de la base de données) ou à un autre principal de la base de données; le propriétaire est donc contenu dans la base de données.
  • Avoir la propriété de base de données par défaut sur le principal principal NT crée un problème de confinement (le propriétaire est un SID NT géré par AD et ne voyage pas avec les fichiers de base de données, le compte NT peut être minuscule, etc., etc.).
  • la chose la plus importante: le propriétaire de la base de données a des effets secondaires importants, en particulier le EXECUTE AS context. Ce dernier problème est ce qui brûle la plupart des utilisateurs. Étant donné que Service Broker utilise beaucoup EXECUTE AS (la livraison du message a un contexte implicite EXECUTE AS, ainsi que l'activation de la file d'attente avec un contexte explicite), ce sont généralement les utilisateurs de Service Broker qui découvrent ce problème.

BTW, Kudos pour enquêter et résoudre votre problème initial :)


13

La base de données ownerest un peu un retour en arrière à une époque antérieure à l'introduction du schéma (approprié) dans SQL Server 2005.

Fondamentalement, un propriétaire de base de données est le propriétaire par défaut dbo(propriétaire de la base de données) de la base de données, la base de données étant elle-même un objet de base de données .

À partir de la documentation SQL Server 2000 ...

Le dboest un utilisateur disposant d'autorisations implicites d'exécuter toutes les activités de la base de données.

Dans les versions antérieures de SQL Server, lorsqu'un schéma ne pouvait pas "posséder" un objet ( ou plutôt, il devrait être indiqué que tous les objets, tables, vues, etc. appartenaient à dboet qu'il n'y avait pas d'autres schémas ), il était nécessaire pour "utilisateur" à posséder ... il devrait aller sans dire pourquoi quelque chose a besoin de posséder la base de données (sinon les autorisations en général seraient plutôt difficiles.)

Donc, techniquement, dans les anciennes versions de SQL Server (ou des bases de données mises à niveau), ce n'était pas la table "Foo", mais bien la table "dbo.Foo" ... dont dbole propriétaire était le propriétaire.

Avec l’avènement de SQL Server 2005, vous pourriez avoir des objets de base de données appartenant à un schéma, comme par exemple un schéma nommé "bar" et une table nommée "Foo" ... cela devient bar.Foocomme dans ...

SELECT * FROM bar.Foo WHERE etc = 'blah`;

La difficulté réside dans le fait que l'utilisateur qui crée la base de données est automatiquement défini comme propriétaire, ce qui entraîne des problèmes de rotation des employés, etc.

Par conséquent, il est recommandé de changer cela en sacompte, ou peut-être (selon mon expérience) en un compte de domaine pouvant être administré par l'équipe des opérations / informatique de l'organisation.

Cet article explique la différence entre l’ancienne façon de faire «propriétaire» et le nouveau système de propriété basé sur un «schéma».

Pour comprendre la différence entre propriétaires et schémas, passons un peu de temps sur la propriété des objets. Lorsqu'un objet est créé dans SQL Server 2000 ou version antérieure, il doit avoir un propriétaire. La plupart du temps, le propriétaire est «dbo», également appelé propriétaire de la base de données.


@RemusRusanu, l'utilisation de l'exemple "schéma vs propriétaire" n'était qu'un moyen d'expliquer l'idée de la raison pour laquelle un "propriétaire" est inhérent à SQL Server. J'apprécie votre réponse aussi! Bien déclaré ... mais je ne le crois pas "donc, donc" en avant dégrade cet exemple / réponse. :)
Justin Jenkins
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.