10
votes

Insertion de force uniquement via la procédure stockée

Utilisation de SQL Server 2008, existe-t-il un moyen d'autoriser des insertions à une table uniquement via une procédure stockée, et si oui comment?

edit:
La meilleure façon d'y aller est probablement la suggestion de Martin Smith d'utiliser un au lieu d'insérer déclencheur. La réponse directe à cette question est celle de Marc_s avec subvention et nie, bien qu'elle ne limitent pas certains comptes d'utilisateurs.


4 Réponses :


6
votes

refuser insérer autorisation sur la table et accorder une autorisation d'exécution sur la procédure stockée.


0 commentaires

9
votes

n'accédez à aucun utilisateur de base de données (et votre rôle "public") l'autorisation d'insertion sur la table.

Accordez ces utilisateurs la permission d'exécuter la procédure d'insertion stockée - de cette façon, elles peuvent appeler la part stockée, mais elles ne peuvent insérer aucune donnée dans la table sous-jacente. P>

DENY INSERT ON dbo.YourTable TO PUBLIC
GRANT EXECUTE ON dbo.InsertDataProc TO PUBLIC


2 commentaires

C'est la seulement Way ... en supposant que la connexion n'est pas db_owner ou sysadmin ...


Cela ne fonctionne pas pour moi. Je reçois la permission d'insertion a été refusé sur l'objet ... même lorsque j'exécute une procédure stockée qui fait l'insert. J'utilise SQL 2012. Ah, je viens d'apprendre que c'est parce que cette réponse ne fonctionnera pas si l'insert se fait avec SQL dynamique à l'intérieur du proc.



2
votes

Utiliser des autorisations (subventions). Créez le SP et accorde au Execute droit à l'utilisateur ou à son rôle en question. Puis refuser l'insertion directement sur la table et vous devriez être tous définis.


0 commentaires

4
votes

Quelle est la motivation de la question? Est-ce parce que la procédure stockée contient une certaine logique que vous comptez sur la mise en œuvre lorsque des données sont insérées? Si oui, vous voudrez peut-être utiliser un déclencheur pour encapsuler cette logique.

Si cela ne convient pas et que vous souhaitez empêcher même les personnes avec des autorisations sysadmin de l'insertion à la table directement, vous ne pouvez pas, mais vous pouvez vous assurer que cela n'arrive pas accidentellement en utilisant un Au lieu d'insérer déclencheur qui soulève une erreur et des rouleaux, sauf si un certain la valeur contextuelle_info est défini, puis efface le context_info (Votre procédure stockée pourrait définir ceci sur l'attendu valeur)

http://msdn.microsoft.com /en-us/library/aa214382%28SQL.80%29.aspx


0 commentaires