2010-02-24 3 views

Répondre

8

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.

+0

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

+1

Cela va de soi, mais après ce qui précède: 'privilèges de vidage;' – mlissner

+0

@mlissner Pouvez-vous expliquer pourquoi? –

-1

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.

+8

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

+1

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. –

+1

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

7

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. "

2

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):

  1. CREATE, ALTER INDEX
  2. 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 :)

Questions connexes