2010-03-08 4 views
1

Un problème est survenu lors de l'exécution de cette instruction de mise à jour (ci-dessous) en utilisant C# SqlCommand lorsque je l'exécute localement mais fonctionne correctement, mais en cas de déploiement sur une autre machine l'ordre des objets ... l'autorisation UPDATE a été refusée à l'ordre de l'objet ...Comment accorder des autorisations à une seule instruction SELECT/UPDATE (serveur sql)?

Mise à jour déclaration

UPDATE Order SET Request = @request WHERE Id = @ID; 

est-il possible d'ajouter GRANT SELECT et GRANT UPDATE à une seule déclaration comme la mise à jour ci-dessus sans utiliser de procédure stockée ré?

ou le SP est la voie à suivre?

Merci d'avance

+0

ASP.NET ou WinForms? –

+0

Utilisez-vous l'authentification SQL ou l'authentification Windows? Cela ressemble à l'authentification Windows. assurez-vous que l'utilisateur connecté sur l'autre poste de travail dispose des droits appropriés. –

+0

il s'agit d'un service Windows et il utilise l'authentification SQL, il utilise effectivement certains sp qui ont le GRANT EXECUTE SUR SP_NAME AUX UTILISATEURS – Albert

Répondre

2

La procédure stockée est la méthode à suivre, vous pouvez alors attribuer des droits d'exécution à cette procédure stockée sans accorder de droits sur la table de base. SQL Server ne peut pas attribuer de droits à des instructions SQL ad hoc individuelles.

0

Vous ne pouvez pas accorder d'autorisations sur les instructions. Vous pouvez accorder SELECT, vous pouvez accorder UPDATE, mais sur la table , pas sur les instructions particulières.

La meilleure solution est en effet d'utiliser des procédures stockées. Exécutez le SELECT autorisé et le UPDATE autorisé à partir d'une procédure stockée et utilisez la signature de code pour accorder les autorisations nécessaires, voir Module Signing (Database Engine). L'utilisation de la signature de code est plus granulaire et mieux contrainte que l'alternative: s'appuyer sur la propriété commune des procédures et des tables pour les autorisations d'exécution.

+0

Vous pouvez également accorder au niveau de la colonne, mais encore une fois, les SP sont une bonne solution ici. –

Questions connexes