Comment configurer les permissions d'une base de données pour une application Django?
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 subventions sur la base de données, pas des permissions dans le cadre de Django lui-même.
4 réponses
j'ai l'habitude:
grant all privileges on my_db.* to my_user@localhost identified by 'my_user_pass'
grant all privileges on test_my_db.* to my_user@localhost identified by 'my_user_pass'
je suppose que s'il y avait un bug à django, vous pourriez ouvrir votre base de données à des choses terribles, mais vous auriez d'autres problèmes s'il y avait ce gros trou de sécurité à django.
django a besoin au minimum de select, insert, update, et delete, pour fonctionner. Si vous utilisez test ou syncdb, vous devrez aussi pouvoir créer des tables et des index (et peut-être la permission du fichier pour le chargement des fixtures sql).
Donc, pour une base de données mysql, je suppose que l'ensemble optimal de permissions peut être select, insert, update, delete, create, index, et file. Si vous vouliez obtenir de véritables détails, vous pouvez accorder ces autorisations appropriées sur le niveau de la table (plutôt que le niveau en db).
Personnellement, je trouve grant all ...
plus facile à taper.
From django docs:
https://docs.djangoproject.com/en/dev/topics/install/
" si vous prévoyez D'utiliser Django manage.py commande syncdb pour créer automatiquement des tables de base de données pour vos modèles (après avoir d'abord installé Django et créé un projet), vous aurez besoin de vous assurer que Django a la permission 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 tout simplement accorder à Django SELECT, insérer, Mettre à jour et supprimer les permissions. Sur certaines bases de données, Django aura besoin des privilèges ALTER TABLE pendant la syncdb, mais n'émettra pas de déclarations ALTER TABLE sur une table une fois que syncdb l'aura créée. Après avoir créé un utilisateur de base de données avec ces permissions, vous allez spécifier les détails dans le fichier de paramètres de votre projet, voir bases de données pour plus de détails."
je viens de tester la configuration initiale avec MySQL. python manage.py migrate
au moins vous avez besoin des subventions suivantes pour une opération simple (si vous utilisez db-preparation):
- CREATE, ALTER, INDEX
- SELECT, UPDATE, INSET, DELETE
Et, par la voie de questions de sécurité. Vous pouvez réduire l'impact d'une attaque en limitant l'exposition de votre système. Dans ce cas - vous pouvez restreindre "DROP" - qui est assez énorme plus. Si vous laissez un trou délicat avec la capacité de SQL-injecter-vous probablement de réduire les dommages. Je ferai des recherches à l'avenir si cela ne fait pas de mal de supprimer le mot - clé Supprimer-qui limiterait également les menaces potentielles. Tout simplement parce que nous quittons tous les bugs de temps en temps :)
à quoi sert la configuration des permissions au niveau de la base de données? Si votre serveur est compromis, alors l'attaquant sera capable de faire n'importe quoi avec votre base de données (parce qu'il a le login/pass) et les permissons n'aideront pas. Si votre serveur est sécurisé, les permissions sont inutiles.
les Permissions peuvent avoir du sens si votre serveur DB est disponible dans le monde extérieur, mais ce n'est pas une bonne idée de le faire.