11
votes

La procédure stockée a-t-elle contribué à éliminer l'injection SQL / quels sont les avantages des procédures stockées sur l'instruction SQL normale sur les applications?

Je suis assez nouveau au monde SQL. Voici mes questions:

  • Quels sont les avantages de la procédure stockée sur une instruction SQL normale dans les applications?
  • La procédure stockée a l'aide d'éliminer l'injection SQL?
  • Dans Microsoft SQL Server, il s'appelle la procédure stockée. Que diriez-vous d'Oracle, MySQL, DB2, etc.?

    Merci pour votre explication.


0 commentaires

5 Réponses :


6
votes

Certains des avantages que je considère lors de l'utilisation de procédures stockées

  • Les procédures stockées encapsulent le code de requête sur le serveur, plutôt que dans votre application. Cela vous permet de modifier les requêtes sans avoir à recompiler votre application.
  • Les procédures stockées peuvent être utilisées pour une sécurité d'application plus bien définie. Vous pouvez refuser tous les droits sur les tables de base, accorder uniquement sur les PROC. Cela vous donne une empreinte de sécurité beaucoup plus petite à gérer.
  • Les procédures stockées sont du code compilé. Avec les dernières versions de MSSQL, le serveur fait un meilleur travail de stockage de plans d'exécution - de sorte que cela n'était donc pas aussi important que ce soit, mais encore quelque chose à considérer
  • Procédures stockées Éliminer le risque d'injection SQL uniquement lorsqu'il est utilisé correctement. Assurez-vous d'utiliser les paramètres de droite à l'intérieur des Procs Proc - stockés stockés, qui viennent d'exécuter SQL dynamique concaténée à l'intérieur d'eux, ne faites personne de bien.

3 commentaires

Je ne suis pas d'accord avec Bouma à ce sujet. Les ormes ont leur place dans le développement de logiciels, comme les procédures stockées. L'écriture d'une ou de l'autre désactivée est entièrement une mauvaise position à prendre. L'affiche originale a déclaré qu'il est "nouveau à SQL" - et, en tant que tel, apprendre tout ce qu'il peut sur les PROC et ORM stockés - ainsi, il peut prendre une décision éduquée pour chaque projet qu'il travaille sur ce qui est juste pour la situation actuelle. .


RE: SPROCS SONT BAD Article: Roubis 1) Tout SQL est fragile - Peu importe l'endroit où il se trouve, les changements de modèle nécessitent une mise à jour (Inclus de code d'application) 2) Défense d'oignon, où la sécurité est superposée. 3) Performance - Montrez-moi un curseur qui effectue plus lentement que A pour une boucle dans la langue de votre choix, et je vais vous montrer une instruction SQL en désireux besoin de réglage.


@Rexam - Bien dit. Je devais tempérer mon choix de mots lorsque je dis "mauvaise position" ...



0
votes

Les procédures stockées vous permettent de stocker votre code SQL dans un endroit en dehors de l'application. Cela vous donne la possibilité de:

  • Modifiez le code SQL sans recompilation / redistraboration de l'application
  • Demandez à plusieurs applications utilisent la même procédure stockée pour accéder aux mêmes données.
  • restreindre les utilisateurs d'avoir accès à lecture / écriture aux tables directement dans la base de données.
  • à partir d'une perspective de développement Il permet également aux programmeurs DBA / Base de données de travailler sur le code SQL sans avoir à passer le code de l'application pour y travailler. (séparation des responsabilités essentiellement).

    Les procédures stockées protègent contre les attaques d'injection? Pour la plupart oui. Dans SQL Server, vous pouvez créer des procédures stockées qui ne sont pas efficaces, principalement à l'aide de sp_executeql. Maintenant, cela ne signifie pas que SP_Executesql est un trou de sécurité, cela signifie simplement que plus de précaution doit être prise lors de l'utilisation.

    Cela ne signifie pas non plus que les procédures stockées sont le seul moyen de se protéger contre cela. Vous pouvez utiliser SQL paramérité pour accomplir la même tâche de protéger contre l'injection SQL.

    Je suis d'accord avec d'autres personnes que les procédures stockées peuvent être lourdes, mais elles ont également leurs avantages. Là où je travaille, nous avons probablement 20 bases de données de production différentes pour diverses raisons (ne demandez pas). Je travaille sur un sous-ensemble de trois ans, et mon coéquipier et je connais vraiment ces trois vraiment très bien. Comment les procédures stockées nous aident-elles? Les gens viennent à nous et quand ils doivent saisir cette information sur ces bases de données, nous pouvons l'obtenir pour eux. Nous n'avons pas à passer des heures à expliquer les schémas et quelles sont les données de normalisation. C'est une couche d'abstraction qui nous permet de programmer le code le plus efficace contre les bases de données que nous connaissons. Si ce n'est pas le cas pour vous, alors peut-être que des procédures stockées ne sont pas la voie à suivre, mais dans certains cas, ils peuvent ajouter beaucoup de valeur.


2 commentaires

Changez le code SQL sans recompiler / redistribuer l'application.!? Bien sûr, il doit compiler. Juste parce que vous n'appelez pas de marque ou de fourmi ou peu importe, cela ne signifie pas que ce n'est pas compilé. Et plus important: bien sûr, vous devez le déployer ou suggérez-vous de changer de code directement dans la base de données de production?


Non, vous avez raison, j'étais signification de la compilation du code d'application (comme c # ou Java). Vous devez le déployer, dans certains cas, mais dans une pincée, vous pouvez tirer le code SQL du serveur et l'exécuter si vous devez, non pas comme une application de bureau où vous devez redéployer pour éventuellement des centaines de machines.



2
votes

Pour la plupart des cas Oui, l'injection SQL est beaucoup moins probable avec une procédure stockée. Bien que des moments où vous souhaitez passer une procédure stockée, des données nécessitant une utilisation dynamique SQL à l'intérieur de la procédure stockée, puis vous êtes de retour où vous avez commencé. En ce sens, je n'en vois aucun avantage sur l'utilisation de requêtes paramétrées dans les langages de programmation qui les soutiennent.

Personnellement, je déteste les procédures stockées. Avoir un code dans deux endroits disjoints est une douleur dans le cul et il déploie beaucoup plus compliqué. Je ne préconise pas la jumellation de votre code avec des déclarations SQL soit car cela conduit à sa propre série de maux de tête.

Je recommande une couche DAL implémentée une des deux manières.

  1. mon préféré, utilisez un objet Système de gestion relationnel (ORM). Je travaille avec NHibernate et j'aimais absolument ça. Les courbe d'apprentissage à raide mais Vaut certainement le gain de mon opinion.
  2. une sorte de mécanisme pour garder Tout votre code SQL au même endroit. Soit une sorte de bibliothèque de requêtes vous choisissez de ou un vraiment ensemble structuré de classes qui Concevez le SQL pour vous. Je ne recommander cette façon car il est essentiellement comme construire votre propre orme et des chances sont que vous n'avez pas le temps Pour le faire correctement.

    Oubliez les procédures stockées. Utilisez un orm.


2 commentaires

Ou mieux encore - utilisez un orj qui utilise des Procs stockés.


@Scott: N'était pas conscient d'exister mais oui, ce serait une option fine aussi.



8
votes

Procédures stockées uniquement directement empêche l'injection SQL si vous les appelez de manière paramérisée. Si vous avez toujours une chaîne dans votre application avec le nom de la procédure et sur les paramètres de concaténate de l'entrée de l'utilisateur à cette chaîne de votre code, vous aurez toujours des problèmes.

Toutefois, lorsqu'il est utilisé exclusivement, les procédures stockées vous permet d'ajouter une protection supplémentaire en vous permettant de désactiver les autorisations à tout sauf la commande EXEC. Outre cette situation, des requêtes paramétrées / des énoncés préparés sont normalement mis en cache par le serveur, et aussi comme une procédure stockée dans presque tous les égards.

Malgré cela, les procédures stockées ont deux grands avantages pour les plus grandes entreprises:

  • Ils vous permettent de définir une interface d'application pour la base de données, de sorte que le système puisse être partagé entre plusieurs applications sans avoir à dupliquer la logique dans ces applications.
  • Ils déplacent le code SQL sur la base de données, où vous pourrez facilement avoir une mélodie de DBA, mise à jour expérimentée et le maintenir, au contraire, plutôt que des développeurs d'applications qui ne savent souvent pas exactement ce qu'ils font avec le code de la base de données. < / li>

    Bien sûr, ces avantages ne sont pas sans frais:

    • Il est plus difficile de suivre les modifications du contrôle de la source
    • Le code de base de données est bien séparé du code qui l'utilise
    • Les outils de développement pour la gestion de nombreuses procédures stockées sont moins qu'idors (si vous avez déjà ouvert le dossier de procédures stocké dans Management Studio pour trouver 200 procédures pour une base de données, vous savez de quoi je parle ici).

1 commentaires

Bien que vos avantages soient fidèles dans les entreprises intermédiaires et grandes entreprises où il y a une DBA sur le personnel, il crée des œuvres de cauchemars pour des personnes comme moi qui gagnent la vie à nettoyer le code des autres. L'avantage de la performance ne vaut tout simplement pas le risque d'abus dans une petite entreprise.



0
votes

Une manière dans laquelle les procédures stockées (celles qui n'utilisent pas Dynamic SQL) peuvent rendre l'ensemble de l'application plus sécurisée est que vous pouvez désormais définir les autorisations au niveau de la procédure stockée et non au niveau de la table. Si vous accédez à tous vos données de cette façon (et interdisez dynamique SQL!) Cela signifie que les utilisateurs ne peuvent en aucun cas se rendre à la base de données qui ne figure pas dans une procédure stockée. Les développeurs veulent toujours dire que leur code de candidature peut protéger contre les menaces extérieures, mais ils semblent oublier que les menaces intérieures sont souvent beaucoup plus graves et permettant aux autorisations au niveau de la table, elles sont à la merci de tout utilisateur qui peut trouver un moyen Pour interroger directement la base de données en dehors de l'application (une autre raison pour laquelle dans les grands magasins, seules deux ou trois personnes ont au maximum des droits de production sur quoi que ce soit dans le DATBase, les limites informatiques peuvent voler des informations).

Tout système financier qui utilise quoi que ce soit, à l'exception des PROC stockés par exemple, est complètement ouvert à une fraude interne, ce qui constitue une violation des contrôles internes qui devrait prévenir la fraude et ne passeraient pas un bon audit.


0 commentaires