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?
Réponses:
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:
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.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 :)
la source
La base de données
owner
est 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 ...
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 à
dbo
et 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
dbo
le 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.Foo
comme dans ...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
sa
compte, 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».
la source