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? P>
edit: strong>
La meilleure façon d'y aller est probablement la suggestion de Martin Smith d'utiliser un au lieu d'insérer a > 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. P>
4 Réponses :
refuser insérer code> autorisation sur la table et accorder une autorisation d'exécution sur la procédure stockée. P>
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
C'est la seulement i> 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 ... code> 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.
Utiliser des autorisations (subventions). Créez le SP et accorde au Execute code> droit à l'utilisateur ou à son rôle en question. Puis refuser l'insertion
code> directement sur la table et vous devriez être tous définis. P>
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. p>
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 http://msdn.microsoft.com /en-us/library/aa214382%28SQL.80%29.aspx P> Au lieu d'insérer code> déclencheur qui soulève une erreur et des rouleaux, sauf si un certain
la valeur contextuelle_info code> est défini, puis efface le
context_info code> (Votre procédure stockée pourrait définir ceci sur l'attendu valeur) p>
Dupliqué possible de Procédure stockée et autorisations - est suffisamment exécutée?