INF: Chaîne de propriété Object vérification sur plusieurs bases de données dépend de la connexion qui est mappée pour les propriétaires d'objets

Traductions disponibles Traductions disponibles
Numéro d'article: 272424 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Résumé

Documentation en ligne de SQL Server indique que les chaînes de propriété sont vérifiés pour les procédures stockées et vues croisent des bases de données. Vous pouvez constater facilement lorsque le propriétaire des objets dépendants dans chaque base de données correspond à la même connexion d'accès. Cependant, si vous avez des utilisateurs dans les deux bases de données qui ont le même nom d'utilisateur, mais ne sont pas mappées à la même connexion d'accès (aussi souvent le cas avec le propriétaire de la base de données [DBO]), il peut sembler que les chaînes de propriété sont incorrectement vérifiées. Par exemple, si le propriétaire de base de données de chaque base de données est mappé à la même connexion d'accès et le propriétaire des objets dans les bases de données est le propriétaire de base de données, les autorisations ne sont pas vérifiées. Toutefois, si le propriétaire de base de données de chaque base de données est mappé à une autre connexion, les chaînes de propriété sont vérifiées. Cela peut se produire avec des utilisateurs autres que le propriétaire de base de données si les noms d'utilisateur sont différents de vos noms de connexion.

Plus d'informations

Autorisations sur une vue ou une procédure stockée peut être accordé à un utilisateur dans une base de données. Si cette vue ou une procédure stockée accède aux objets dans une autre base de données qui appartient à un utilisateur mappé à une autre connexion, les autorisations des objets sous-jacents sont vérifiées. Si l'utilisateur n'a pas d'autorisations aux objets dans la base de données, l'erreur suivante est renvoyée :
Erreur 229: %ls autorisation refusée sur l'objet ' %. * ls ', base de données' %. * ls', propriétaire ' %. * ls'.
Toutefois, si la connexion d'accès mappée sous-jacente des objets dans la requête est identique, autorisations ne sont pas vérifiées et la requête s'exécute sans erreur ci-dessus, même si l'utilisateur n'a pas d'autorisations sur les tables sous-jacentes.

Pour voir un exemple de cela, procédez comme suit :
  1. La valeur d'un environnement de reproduction avec deux bases de données différents ; db1 est la base de données de "Base" avec les données et db2 contient une vue qui sélectionne à partir de la table dans db1.
    USE master
    GO
    CREATE DATABASE db1
    CREATE DATABASE db2
    EXEC sp_addlogin Owner1
    EXEC sp_addlogin Owner2
    EXEC sp_addlogin TestUser
    GO
    -- setup database #1, DBO is Owner1
    USE db1
    EXEC sp_changedbowner Owner1
    EXEC sp_adduser TestUser
    CREATE TABLE BaseTable (TableColumn CHAR(20))
    INSERT BaseTable VALUES ('Select Succeeded')
    GO
    -- setup database #2
    USE db2
    EXEC sp_adduser TestUser
    GO
    CREATE VIEW      CrossDatabaseView           AS SELECT * FROM db1.dbo.BaseTable
    GO
    GRANT SELECT  ON CrossDatabaseView           TO public
    GO
    					
  2. Exécutez le code suivant pour afficher les résultats différents en fonction de si le propriétaire de base de données est identique ou différents :
    SET NOCOUNT ON
    GO
    PRINT '***** results with both DBOs the same *****'
    PRINT ''
    USE db2
    EXEC sp_changedbowner Owner1
    SETUSER 'TestUser'
    GO
    SELECT * FROM CrossDatabaseView
    GO
    SETUSER
    GO
    
    PRINT ''
    PRINT '***** results with each DBO different *****'
    PRINT ''
    USE db2
    EXEC sp_changedbowner Owner2
    SETUSER 'TestUser'
    GO
    SELECT * FROM CrossDatabaseView
    GO
    SETUSER
    GO
    					
  3. Nettoyer les bases de données et les connexions créées pour cet exemple :
    USE master
    GO
    DROP DATABASE db1
    DROP DATABASE db2
    EXEC sp_droplogin Owner1
    EXEC sp_droplogin Owner2
    EXEC sp_droplogin TestUser
    GO
    					

Propriétés

Numéro d'article: 272424 - Dernière mise à jour: jeudi 5 février 2004 - Version: 4.3
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft SQL Server 7.0 Standard
  • Microsoft SQL Server 2000 Standard
Mots-clés : 
kbmt kbinfo kbpending KB272424 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 272424
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com