2008-12-05 8 views
2

Si vous avez créé un rôle personnalisé dans SqlServer que j'ai ajouté aux rôles db__denydatareader et db__denydatawriter. Je pense est passé par la base de données et accordé l'autorisation exec à toutes les procédures stockées neccersary.L'autorisation SELECT a été refusée sur l'objet

Tout fonctionne bien, appelant ces sps fonctionnera bien. La seule exception est une procédure stockée qui exécute SQL dynamique en utilisant sp_executesql. Cela ne dit

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

Est-il possible d'accorder l'autorisation de rôle pour exécuter cette requête sans lui donner accès à sélectionner les tables sous-jacentes?

Je suppose que ce que je veux faire est d'accorder exec sur sys.sp_executesql mais seulement dans un certain cas.

Répondre

2

Vous pouvez créer un nouvel utilisateur seulement pour votre procédure stockée qui utilise execute_sql, accordez-lui les droits requis, puis ajoutez à la définition de la procédure WITH EXECUTE AS 'MyUser'. See MSDN.

+1

c'est très cool et on dirait que ça va faire l'affaire. merci – mjallday

+0

C'était ma première suggestion après avoir lu la question. –

+0

Merci! Sur Internet, je lisais sur la signature des certificats et d'autres surpuissance. Tout ce dont j'avais besoin était d'ajouter un login avec juste le rôle de base de données db_datareader. Maintenant, je peux avoir ma connexion asp.net exécuter des sprocs qui utilisent sp_executesql en ajoutant "WITH EXECUTE AS 'DataReaderOnlyUser'" à la définition du sproc. – MikeTeeVee

0

Utilisez l'instruction suivante pour cela. Cela a fonctionné pour moi.

sp_addlinkedserver [@ server =] 'serveur' [[@ srvproduct =] 'product_name'] [[@ provider =] 'provider_name']

[ , [ @datasrc= ] 'data_source' ] 
[ , [ @location= ] 'location' ] 
[ , [ @provstr= ] 'provider_string' ] 
[ , [ @catalog= ] 'catalog' ] 
Questions connexes