IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

protéger sqlite3 base de données


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    ngénieur d'etat en science géodésique et travaux topographique
    Inscrit en
    septembre 2016
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : ngénieur d'etat en science géodésique et travaux topographique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : septembre 2016
    Messages : 82
    Points : 49
    Points
    49
    Par défaut protéger sqlite3 base de données
    Est-il possible de protéger par mot de passe une base de données en utilisant sqlite3 avec python?

  2. #2
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    juin 2013
    Messages
    1 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2013
    Messages : 1 450
    Points : 1 888
    Points
    1 888
    Par défaut
    Bonjour.
    Pas d'aide par mp.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    8 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 8 877
    Points : 24 394
    Points
    24 394
    Billets dans le blog
    1
    Par défaut
    Oui.
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2007
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : décembre 2007
    Messages : 4 087
    Points : 8 452
    Points
    8 452
    Billets dans le blog
    6
    Par défaut
    Bonjour aussi.

    J'ai participé à une discussion ici en 2014, et ma réponse n'a pas changée:
    https://www.developpez.net/forums/d1...nees-cryptees/

    Pour le cryptage: tout est possible, y compris RSA, mais ça dépend de l'importance des données (conséquences d'une divulgation?). Pour des données d'importance modérée, un cryptage "xor" devrait être suffisant.

    Il reste que la base est non-cryptée pendant l'exécution du programme. A voir possibilité si la base est petite à l'utiliser décryptée uniquement en mémoire (disque virtuel?) avec précautions en cas de coupure de courant.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    juin 2008
    Messages
    17 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 17 530
    Points : 30 245
    Points
    30 245
    Par défaut
    Salut,

    Ce serait une fonctionnalité de sqlite3 (et vous pouvez fabriquer votre mouture de sqlite3 pour...) (mais cette extension n'est pas dans le sqlite3 livré avec Python).

    sqlite3 est plutôt orienté base de données "embarquée".

    Si on veut se protéger ce sera contre le vol du disque, du PC, ... qui contient le fichier de la base de données.

    Le chiffrement du disque, le mot de passe que l'utilisateur entre lorsqu'il se connecte sont des protections "générales" disponibles.

    Les SGDB plus génériques sont plus protégées "de base" et des extensions pour le chiffrement (si on veut se protéger contre les administrateurs du système qui héberge la base de données...)

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre du Club
    Homme Profil pro
    ngénieur d'etat en science géodésique et travaux topographique
    Inscrit en
    septembre 2016
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : ngénieur d'etat en science géodésique et travaux topographique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : septembre 2016
    Messages : 82
    Points : 49
    Points
    49
    Par défaut
    Merci à tous
    J'essaierai toutes les méthodes mentionnées, mais l'utilisation du cryptage affecte-t-elle les performances de la base de données en termes de vitesse de lecture et d'écriture?

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    8 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 8 877
    Points : 24 394
    Points
    24 394
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par rabeh.ram Voir le message
    Ml'utilisation du cryptage affecte-t-elle les performances de la base de données en termes de vitesse de lecture et d'écriture?
    Fatalement oui, tout calcul sur une donnée avant de l'écrire est toujours plus long qu'écrire la donnée sans la modifier.
    Mais t'as pas bien pigé l'idée: l'idée n'est pas de chiffrer (c'est le terme exact) la bdd en temps réel, c'est
    • la déchiffrer au début du programme, déchiffrement générant une bdd "prime" qui sera soit sur disque, soit en RAM
    • travailler sur la bdd "prime" non chiffrée
    • la chiffrer quand on quitte le programme (ou à intervalles fixes ou sur demande éventuellement) et effacer la bdd "prime"

    Les opérations se faisant sur une bdd non chiffrée seront donc des opérations classiques, aussi rapides que les autres. C'est la phase déchiffrement du début et chiffrement final qui seront plus ou moins longues, mais faites une seule fois donc négligeables.
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  8. #8
    Membre du Club
    Homme Profil pro
    ngénieur d'etat en science géodésique et travaux topographique
    Inscrit en
    septembre 2016
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : ngénieur d'etat en science géodésique et travaux topographique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : septembre 2016
    Messages : 82
    Points : 49
    Points
    49
    Par défaut
    Pour rester simple est-il possible utiliser DB Browser for SQLite pour créé une mot de passe

    Nom : Capture.PNG
Affichages : 27
Taille : 69,8 Ko

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    juin 2008
    Messages
    17 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 17 530
    Points : 30 245
    Points
    30 245
    Par défaut
    Salut,

    Citation Envoyé par rabeh.ram Voir le message
    Pour rester simple est-il possible utiliser DB Browser for SQLite pour créé une mot de passe
    Déjà avez vous recompilé sqlite3 avec les extensions qui vont bien côté utilisateur/mot de passe?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2007
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : décembre 2007
    Messages : 4 087
    Points : 8 452
    Points
    8 452
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je ne connais pas DB Browser, mais il s'agit d'un éditeur de base de données sqlite comme il en existe d'autres, payants ou pas. J'utilisais beaucoup il y a quelques années "SQLite Expert pro" (http://www.sqliteexpert.com/) version payante (une centaine d'euros pour une licence), mais il existe une version gratuite plus légère. Cependant, je n'ai pas vu de fonctionnalités de cryptage.

    Pour DB Browser, il y a des infos sur le cryptage des bases de données ici:
    https://github.com/sqlitebrowser/sql...pted-Databases

    Mais ce logiciel n'a rien à voir avec Python, et s'il fait un cryptage AES, tu auras du mal à lire ta base de données avec Python (il faudra décrypter avant et recrypter après, le tout en AES). Ce n'est cependant pas impossible, mais tu te prépares des moments difficiles...

    Si tu veux rester simple, il te faudra choisir entre Python OU ce logiciel pour gérer ta base de données sqlite...


    Pour la version Python, et dans la mesure où tes données ne sont pas de niveau "sécurité défense", je te propose un cryptage XOR avec clé. Il est déjà assez fort, assez difficile à décrypter, facile à coder en Python, et d'exécution rapide.

    Voilà un petit code qui fait ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    """
    Cryptage xor avec clé d'un texte et d'un fichier
    """
     
    ###############################################################################
    def cryptxortexte(btexte, bkey):
        """Cryptage xor avec clé d'un texte
           Attention: btexte et bkey doivent être de type "bytes"
                         et retourne le texte crypté de type bytes
        """
        lgkey = len(bkey)
        encoded = []
        for i in range(0, len(btexte)):
            encoded.append(btexte[i] ^ bkey[i % lgkey])
        return bytes(encoded)
     
    ###############################################################################
    def cryptxorfichier(fichier1, fichier2, key, tbuf=8192):
        """Cryptage xor avec clé d'un fichier1 => fichier2
           fichier2 doit être différent de fichier1
           key est la clé de cryptage (type str ou bytes)
           tbuf la taille du buffer de lecture des données du fichier1
        """
        if isinstance(key, str):
            key = bytes(key, "utf-8")
        lgkey = len(key)
        tbuf2 = tbuf//lgkey*lgkey # buffer qui contient un nombre entier de key
        with open(fichier1, "rb") as fs:
            with open(fichier2, "wb") as fd:
                while True:
                    buf = fs.read(tbuf2)
                    if len(buf)==0:
                        break
                    fd.write(cryptxortexte(buf, key))
    Comme les octets font l'objet d'un xor ("ou exclusif" => opérateur '^') avec une clé qui sert de mot de passe, il sera difficile à un pirate de retrouver le message grâce à la reconnaissance d'une fréquence de lettres. Mais il ne faudra pas oublier la clé! A noter une particularité du cryptage xor: pour décrypter, on utilise la fonction de cryptage une seconde fois!

    Deux petites précautions à prendre:
    - Évite de coder en clair la clé dans ton code!
    - Si ton programme crashe, la base de données ne sera pas cryptée. Il faudra donc qu'au lancement, ton programme puisse tester si ta base de données est cryptée ou pas, pour en déduire ce qu'il doit faire!

    Si tu veux un cryptage plus fort, il existe des modules Python externes qui font ça (voir déjà pypi: https://pypi.org/).

    J’espère que la protection de tes données mérite les précautions que tu veux prendre...
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

Discussions similaires

  1. comment protéger une base de donné par un code
    Par 21247692 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 03/04/2008, 12h11
  2. Réponses: 3
    Dernier message: 23/04/2007, 09h57
  3. Comment protéger une base de données SQL Server
    Par ssakhri dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 03/01/2007, 09h06
  4. Réponses: 9
    Dernier message: 02/01/2007, 12h03
  5. [PHP/ACCESS] Protéger la base de données
    Par Trunks dans le forum Access
    Réponses: 4
    Dernier message: 14/02/2006, 20h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo