Chaînes de propriétés
Lorsque plusieurs objets de base de données accèdent les uns aux autres de façon séquentielle, la séquence est appelée chaîne. Bien que de telles chaînes n'existent pas indépendamment les unes des autres, lorsque SQL Server parcourt les liens d'une chaîne, SQL Server évalue les autorisations sur les objets constitutifs différemment de ce qu'il ferait s'il accédait aux objets séparément. Ces différences ont d'importantes incidences sur la gestion de la sécurité.
Le chaînage des propriétés permet de gérer l'accès à plusieurs objets, tels que des tables, en assignant des autorisations sur un objet, tel qu'une vue. Le chaînage des propriétés offre également un léger avantage en termes de performances dans les scénarios qui permettent d'ignorer la vérification des autorisations.
Comment vérifier les autorisations dans une chaîne
Lorsqu'un objet est accessible via une chaîne, SQL Server compare d'abord le propriétaire de l'objet au propriétaire de l'objet appelant. Il s'agit du lien précédent dans la chaîne. Si les deux objets appartiennent au même propriétaire, les autorisations sur l'objet référencé ne sont pas évaluées.
Exemple de chaînage des propriétés
Dans l'illustration suivante, la vue July2003 appartient à Mary. Elle a accordé les autorisations sur la vue à Alex. Il n'a pas d'autres autorisations sur les objets de base de données de cette instance. Que se passe-t-il lorsqu'Alex sélectionne la vue ?
Alex exécute SELECT * sur la vue July2003. SQL Server vérifie les autorisations sur la vue et confirme qu'Alex dispose de l'autorisation select sur cette vue.
La vue July2003 requiert des informations contenues dans la vue SalesXZ. SQL Server vérifie à qui appartient la vue SalesXZ. Cette vue ayant la même propriétaire (Mary) que la vue qui l'appelle, les autorisations sur SalesXZ ne sont pas vérifiées. Les informations requises sont retournées.
La vue SalesXZ requiert des informations contenues dans la vue InvoicesXZ. SQL Server vérifie à qui appartient la vue InvoicesXZ. Cette vue ayant le même propriétaire que l'objet précédent, les autorisations sur InvoicesXZ ne sont pas vérifiées. Les informations requises sont retournées. Jusqu'à présent, tous les éléments de la séquence avaient la même propriétaire (en l'occurrence, Mary). Ceci est également appelé chaîne de propriétés continue.
La vue InvoicesXZ requiert des informations contenues dans la vue AcctAgeXZ. SQL Server vérifie à qui appartient la vue AcctAgeXZ. Le propriétaire de cette vue étant différent de celui de l'objet précédent (Sam, et non Mary), les informations complètes concernant les autorisations sur cette vue sont récupérées. Si la vue AcctAgeXZ a des autorisations qui permettent l'accès d'Alex, les informations sont retournées.
La vue AcctAgeXZ requiert des informations contenues dans la table ExpenseXZ. SQL Server vérifie à qui appartient la table ExpenseXZ. Le propriétaire de cette table étant différent de celui de l'objet précédent (Joe, et non Sam), les informations complètes concernant les autorisations sur cette table sont récupérées. Si la table ExpenseXZ a des autorisations qui permettent l'accès d'Alex, les informations sont retournées.
Lorsque la vue July2003 tente de récupérer des informations contenues dans la table ProjectionsXZ, le serveur vérifie d'abord si le chaînage des bases de données croisées est activé entre Base de données 1 et Base de données 2. Si le chaînage des bases de données croisées est activé, le serveur vérifie l'appartenance de la table ProjectionsXZ. Cette table ayant la même propriétaire que la vue appelante (Mary), les autorisations sur cette table ne sont pas vérifiées. Les informations requises sont retournées.
Chaînage des propriétés des bases de données croisées
SQL Server peut être configuré pour autoriser le chaînage des propriétés entre des bases de données spécifiques ou entre toutes les bases de données croisées à l'intérieur d'une instance de SQL Server unique. Le chaînage des propriétés des bases de données croisées est désactivé par défaut et ne doit pas être activé, sauf recommandation expresse.
Menaces potentielles
Le chaînage des propriétés est très utile dans la gestion des autorisations sur une base de données, mais il suppose que les propriétaires des objets anticipent les incidences de chacune de leurs décisions avant d'accorder des autorisations sur un objet sécurisable. Dans l'illustration précédente, Mary est propriétaire de la plupart des objets sous-jacents de la vue July 2003. Mary ayant le droit de rendre les objets qui lui appartiennent accessibles à n'importe quel autre utilisateur, SQL Server se comporte comme si chaque fois que Mary accordait l'accès à la première vue d'une chaîne, elle était pleinement consciente du fait qu'elle partageait ainsi les vues et la table référencées. Dans la vie réelle, cette supposition peut ne pas être valide. Las bases de données de production sont nettement plus complexes que celle présentée dans l'illustration, et les autorisations qui en régulent l'accès correspondent rarement de façon parfaite aux structures administratives des organisations qui les utilisent.
Vous devez comprendre que les membres des rôles de base de données hautement privilégiés peuvent utiliser le chaînage des bases de données croisées pour accéder aux objets de bases de données externes à leurs propres bases. Par exemple, si le chaînage des bases de données croisées est activé entre les bases de données A et B, un membre du rôle de base de données fixe db_owner de l'une des deux bases peut usurper l'accès à l'autre base. Le processus est simple : Diane (membre de db_owner dans la base de données A) crée l'utilisateur Stuart dans la base de données A. Stuart existe déjà en tant qu'utilisateur dans la base de données B. Diane crée ensuite un objet (appartenant à Stuart) dans la base de données A qui appelle un objet appartenant à Stuart dans la base de données B. Les objets appelant et appelé ayant le même propriétaire, les autorisations sur l'objet de la base de données B ne sont pas vérifiées lorsque Diane y accède via l'objet qu'elle a créé.