Je cherche des liens, ou une réponse ici, sur la façon de configurer correctement les permissions de la base de données pour sécuriser une application Django? Pour être clair, je cherche spécifiquement du matériel traitant des concessions sur la base de données, pas des permissions dans le cadre de Django lui-même.Comment configurer les autorisations de base de données pour une application Django?
Répondre
Je habituellement:
grant all privileges on my_db.* to [email protected] identified by 'my_user_pass'
grant all privileges on test_my_db.* to [email protected] identified by 'my_user_pass'
Je suppose que s'il y avait un bug dans django, vous pourriez être l'ouverture de votre base de données à des choses terribles, mais vous auriez d'autres problèmes s'il y avait un gros sécurité trou dans django.
django a besoin de sélectionner, insérer, mettre à jour et supprimer, pour fonctionner. Si vous utilisez test ou syncdb, vous devez également pouvoir créer des tables et des index (et peut-être l'autorisation de fichier pour le chargement de projecteurs sql). Donc, pour une base de données mysql, je suppose que l'ensemble optimal d'autorisations peut être sélectionner, insérer, mettre à jour, supprimer, créer, indexer et classer. Si vous vouliez obtenir de vrais détails, vous pourriez accorder ces permissions de manière sélective au niveau de la table (plutôt qu'au niveau db).
Personnellement, je trouve grant all ...
plus facile à taper.
Quel est le but de la configuration des autorisations au niveau de la base de données? Si votre serveur est compromis, l'attaquant sera capable de faire n'importe quoi avec votre base de données (parce qu'il a le login/pass) et permissons n'aidera pas. Si votre serveur est sécurisé, les autorisations sont inutiles.
Les autorisations peuvent avoir un sens si votre serveur de base de données est disponible dans le monde extérieur, mais ce n'est pas une bonne idée de le faire.
En ajoutant des permissions DB, vous avez la possibilité de limiter ce qui peut être réalisé avec une injection SQL etc attaques. Si le serveur Web est compromis, les autorisations de base de données ont le potentiel de limiter les dommages - par ex. – emru
Il est facile d'éviter les injections SQL avec django et je ne vois pas de grande différence entre effacer toutes les tables et supprimer la base de données. Dans les deux cas, vous avez perdu vos données et devrait restaurer n'importe quoi à partir de la sauvegarde après avoir éliminé la vulnérabilité. Il n'est pas évident que les autorisations au niveau DB rendent votre projet plus sécurisé. Je pense que django n'a pas de support intégré pour les permissions au niveau DB car il vaut mieux faire des efforts pour corriger de vrais problèmes: XSS, CSRF, injections SQL, etc. et ne pas se tromper avec des demi-mesures. –
Voici le conseil de Microsoft pour les applications ASP.NET "... Accorder uniquement les autorisations minimales que l'application doit avoir pour fonctionner." Et SANS "... L'approche à ceci devrait être d'accorder seulement les autorisations minimales que l'application exige d'exécuter." Etc Des erreurs peuvent se produire à n'importe quel niveau de la pile d'applications - pourquoi ne voudriez-vous pas utiliser tous les outils possibles pour empêcher la propagation d'une attaque? – emru
Des django docs:
https://docs.djangoproject.com/en/dev/topics/install/
« Si vous prévoyez d'utiliser la commande manage.py syncdb de Django aux tables créer automatiquement la base de données pour vos modèles (après la première installation de Django et la création d'un projet), vous Vous devez vous assurer que Django a l'autorisation de créer et de modifier des tables dans la base de données que vous utilisez: si vous prévoyez de créer manuellement les tables, vous pouvez simplement accorder des permissions Django SELECT, INSERT, UPDATE et DELETE. aura besoin de privilèges ALTER TABLE pendant la synchronisation, mais n'émettra pas d'instructions ALTER TABLE sur une table une fois que syncdb l'aura créé. Avec ces autorisations, vous spécifiez les détails dans le fichier de paramètres de votre projet, voir la section BASES DE DONNEES pour plus de détails. "
Je viens de tester la configuration initiale avec MySQL. Pour python manage.py migrate
au moins vous avez besoin des subventions suivantes pour une utilisation simple (si yo utilisation db-préparation):
- CREATE, ALTER INDEX
- SELECT, UPDATE, INSET, SUPPRIMER
Et, le chemin - la sécurité compte. Vous pouvez réduire l'impact de l'attaque en limitant l'exposition de votre système. Dans ce cas, vous pouvez restreindre 'DROP' - ce qui est assez énorme. Si vous laissez un trou difficile avec la possibilité d'injecter du SQL, vous réduisez probablement les dégâts. Je ferai des recherches à l'avenir si cela ne fait pas de mal à supprimer le mot-clé DELETE - ce qui limiterait aussi les menaces potentielles. Juste parce que nous laissons tous des bugs de temps en temps :)
- 1. Comment configurer les autorisations pour Android Bluetooth
- 2. Django avec une base de données existante
- 3. Adaptation d'une base de données existante à une application django
- 4. Comment escalader les autorisations d'utilisateur de base de données pour créer de nouvelles bases de données?
- 5. Django - comment spécifier une base de données pour un modèle?
- 6. Comment configurer la base de données pour l'application ASP.NET MVC
- 7. django - spécifiez la base de données pour les appareils TestCase
- 8. Configurer l'application ADP pour utiliser une base de données différente ...?
- 9. Comment configurer les autorisations sur le dossier de l'application pour écrire des documents XML
- 10. ActiveRecord sans configurer les tables de base de données? (déclaratif comme Django)
- 11. Comment configurer SSL sur une base de données au printemps?
- 12. Application de SQL Server pour supprimer une base de données
- 13. Comment obtenir des autorisations pour une base de données Sql Compact?
- 14. Comment limiter les autorisations d'un programme C# à lire uniquement sur une base de données SQLServer?
- 15. django/upload de fichier autorisations
- 16. Comment configurer une procédure stockée pour accéder à une table dans une autre base de données
- 17. combinant ORM django avec un accès direct à la base de données pour une application complexe?
- 18. Comment configurer la relation de base de données MySQL
- 19. Comment configurer une base de données et une page Web API pour accepter les mises à jour POST de l'iPhone?
- 20. Comment surveiller une base de données pour de nouvelles entrées?
- 21. Application Java pour faire une sauvegarde de base de données
- 22. Application multiple utilisant une base de données?
- 23. autorisations appropriées pour une application rails
- 24. Autorisations utilisateur Django pour le service média
- 25. Définition des autorisations de base de données SQL pour l'assistant de configuration des données Visual Studio
- 26. Comment créer les migrations pour une base de données existante?
- 27. Django: Configurer une page de profil utilisateur?
- 28. Comment restaurer les autorisations DTS après la restauration de la base de données sur SQL 2000
- 29. Comment configurer un pool de connexions pour accéder à une base de données Postgis?
- 30. Comment configurer EM à l'intérieur de la base de données
Merci Seth. Je fais ça aussi. Cependant, je cherchais le "vrai Nitty-Gritty" comme vous le dites.J'ai vu quelque chose sur le web il y a un moment qui couvrait tout cela en détail et semblait dur à durcir. Malheureusement, je ne l'ai pas mis en signet ... – emru
Cela va de soi, mais après ce qui précède: 'privilèges de vidage;' – mlissner
@mlissner Pouvez-vous expliquer pourquoi? –