DetailPage-MSS-KB

Base de connaissances

Numéro d'article: 301299 - Dernière mise à jour: jeudi 16 octobre 2003 - Version: 3.2

 

Symptômes

Lorsque vous exécutez une procédure stockée avec une requête dynamique l'exécution ( sp_executesql ou EXECUTE), vous pouvez recevoir le message d'erreur suivantes :
Serveur: Msg 229, niveau 14, état 5, ligne 1 « permission » Autorisation refusée sur l'objet ' object ', base de données « database », le propriétaire du « owner ».

Cause

Ce problème se produit car une requête de l'exécution dynamique ( sp_executesql ou EXECUTE) s'exécute dans un contexte séparé de la procédure stockée principale ; il s'exécute dans le contexte de sécurité de l'utilisateur qui exécute la procédure stockée et pas dans le contexte de sécurité du propriétaire de la procédure stockée.

Remarque : vous devez prendre ce comportement en compte lorsque vous déterminez les chaînes de la propriété.

Contournement

Pour contourner ce problème :
  • Vous devez correctement octroyer l'autorisation nécessaire pour chaque objet sous-jacent qui est mentionné dans la requête Exécution dynamique.
  • Vous pouvez exécuter une instruction SELECT avec la clause INTO pour créer une table temporaire qui contient toutes les données de la table d'origine, puis EXEC votre instruction SQL sur la table temporaire. Ceci est une solution viable si les tables que vous travaillez avec sont petits.

Plus d'informations

Le code suivant illustre ce problème :
   create database dynamicSQL
   go
   use dynamicSQL
   create table employee(Name varchar(255), salary money)
   go
   create proc TestError @MySql nvarchar(500) As 
   exec (@mySql)
   go
   set nocount on
   insert employee select 'FunctionFunction', 100000
   insert employee select 'Function', 30000
   set nocount off
   exec sp_addlogin 'FunctionFunction'
   exec sp_adduser 'FunctionFunction'
   exec sp_addlogin 'Function'
   exec sp_adduser 'Function'

   grant execute on TestError to Function

   setuser 'Function'
				
le code suivant reproduit ce problème :
   go
   declare @Sql varchar(500)
   set @Sql = 'select * from employee where Name = ''FunctionFunction'''
   exec TestError @Sql
				
le code suivant permet de supprimer la base de données test dynamicSql et les ouvertures de session utilisés dans ce scénario de reproduction :
   go
   setuser 
   use master
   drop database dynamicSql
   exec sp_droplogin  'FunctionFunction'
   exec sp_droplogin 'Function'
				
pour plus d'informations sur les chaînes de propriété, consultez à l'aide de chaînes de propriété dans la documentation en ligne de SQL Server.

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft SQL Server 2000 Standard
  • Microsoft SQL Server 7.0 Standard
Mots-clés : 
kbmt kbprb KB301299 KbMtfr
Traduction automatiqueTraduction 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: 301299  (http://support.microsoft.com/kb/301299/en-us/ )
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.
Partager
Options de support supplémentaire
Forums du support Microsoft Community
Nous contacter directement
Trouver un partenaire Microsoft Certified Partner
Microsoft Store