Question

Si vous avez créé un rôle personnalisé dans SqlServer, que j'ai ajouté aux rôles db__denydatareader et db__denydatawriter. Je pense que je suis passé par la base de données et a accordé l'autorisation d'exécuter à toutes les procédures stockées neccersary.

Tout fonctionne bien, appeler ces sps fonctionnera bien. La seule exception est une procédure stockée qui exécute SQL dynamique à l'aide de sp_executesql. Cela échoue en disant

The SELECT permission was denied on the object 'listing_counter', database 'Cannla', schema 'dbo'.

Existe-t-il un moyen d'accorder au rôle l'autorisation d'exécuter cette requête sans lui attribuer un accès sélectif aux tables sous-jacentes?

Je suppose que ce que je veux faire, c’est accorder à exec sur sys.sp_executesql mais uniquement dans certains cas.

Était-ce utile?

La solution

Vous pouvez créer un nouvel utilisateur pour votre procédure stockée qui utilise execute_sql, lui octroyer les droits nécessaires, puis l'ajouter à la définition de procédure WITH EXECUTE AS 'MyUser'. Voir MSDN.

Autres conseils

Utilisez les instructions suivantes pour cela. Cela a fonctionné pour moi.

sp_addlinkedserver [@ server =] 'serveur' [, [@ srvproduct =] 'nom_produit']      [, [@ fournisseur =] 'nom_fournisseur']

 [ , [ @datasrc= ] 'data_source' ] 
 [ , [ @location= ] 'location' ] 
 [ , [ @provstr= ] 'provider_string' ] 
 [ , [ @catalog= ] 'catalog' ] 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top