Je dois faire face à un nouveau petit projet. Il aura environ 7 ou 9 tables, la plus grande d'entre elles augmentera d'un taux maximum de 1000 lignes par mois.
J'ai pensé à SQLite comme ma base de données ... Mais je devrai protéger la base de données au cas où quelqu'un voudrait changer les données de la base de données
Ma principale question est:
Est-il possible de protéger par mot de passe une base de données sqlite comme vous le feriez lors de l'accès?
Quel autre SGBDR recommanderiez-vous pour une solution aussi petite?
Le développement serait sur C #, mais je cherche quelque chose de gratuit.
Réponses:
Vous pouvez protéger par mot de passe une base de données SQLite3. Avant d'effectuer toute opération, définissez le mot de passe comme suit.
SQLiteConnection conn = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;"); conn.SetPassword("password"); conn.Open();
puis la prochaine fois, vous pourrez y accéder comme
conn = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;Password=password;"); conn.Open();
Cela n'autorisera aucun éditeur d'interface graphique à afficher vos données. Certains éditeurs peuvent déchiffrer la base de données si vous fournissez le mot de passe. L'algorithme utilisé est RSA.
Plus tard, si vous souhaitez modifier le mot de passe, utilisez
conn.ChangePassword("new_password");
Pour réinitialiser ou supprimer le mot de passe, utilisez
conn.ChangePassword(String.Empty);
la source
Vous pouvez utiliser le chiffrement intégré du fournisseur sqlite .net (System.Data.SQLite). Pour plus de détails, consultez http://web.archive.org/web/20070813071554/http://sqlite.phxsoftware.com/forums/t/130.aspx
Pour crypter une base de données non cryptée existante ou pour modifier le mot de passe d'une base de données cryptée , ouvrez la base de données puis utilisez la fonction ChangePassword () de SQLiteConnection:
// Opens an unencrypted database SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db3"); cnn.Open(); // Encrypts the database. The connection remains valid and usable afterwards. cnn.ChangePassword("mypassword");
Pour déchiffrer un appel de base de données chiffré existant
ChangePassword()
avec un mot de passeNULL
ou""
:// Opens an encrypted database SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db3;Password=mypassword"); cnn.Open(); // Removes the encryption on an encrypted database. cnn.ChangePassword(null);
Pour ouvrir une base de données chiffrée existante ou pour créer une nouvelle base de données chiffrée, spécifiez un mot de passe dans le
ConnectionString
comme indiqué dans l'exemple précédent, ou appelez laSetPassword()
fonction avant d'en ouvrir une nouvelleSQLiteConnection
. Les mots de passe spécifiés dans leConnectionString
doivent être en texte clair, mais les mots de passe fournis dans laSetPassword()
fonction peuvent être des tableaux d'octets binaires.// Opens an encrypted database by calling SetPassword() SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db3"); cnn.SetPassword(new byte[] { 0xFF, 0xEE, 0xDD, 0x10, 0x20, 0x30 }); cnn.Open(); // The connection is now usable
Par défaut, le mot clé ATTACH utilisera la même clé de chiffrement que la base de données principale lors de l'attachement d'un autre fichier de base de données à une connexion existante. Pour modifier ce comportement, vous utilisez le modificateur KEY comme suit:
Si vous attachez une base de données chiffrée à l'aide d'un mot de passe en texte clair:
// Attach to a database using a different key than the main database SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db3"); cnn.Open(); cmd = new SQLiteCommand("ATTACH DATABASE 'c:\\pwd.db3' AS [Protected] KEY 'mypassword'", cnn); cmd.ExecuteNonQuery();
Pour attacher une base de données chiffrée à l'aide d'un mot de passe binaire:
// Attach to a database encrypted with a binary key SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db3"); cnn.Open(); cmd = new SQLiteCommand("ATTACH DATABASE 'c:\\pwd.db3' AS [Protected] KEY X'FFEEDD102030'", cnn); cmd.ExecuteNonQuery();
la source
Utilisez SQLCipher, c'est une extension open source pour SQLite qui fournit un cryptage AES transparent 256 bits des fichiers de base de données. http://sqlcipher.net
la source
Vous pouvez crypter votre base de données SQLite avec l'addon SEE. De cette façon, vous évitez les accès / modifications non autorisés.
Citant la documentation SQLite:
Vous pouvez trouver plus d'informations sur cet addon dans ce lien .
la source
Une option serait VistaDB . Ils permettent aux bases de données (ou même aux tables) d'être protégées par mot de passe (et éventuellement cryptées).
la source
pour votre question sur le mot de passe protégeant votre base de données sqlite, je ne pense pas que cela puisse être fait.
vous pouvez le crypter cependant, voici quelques informations à ce sujet:
http://sqlcrypt.com/
c'est 149 $ par plateforme.
la source
Si vous utilisez FluentNHibernate, vous pouvez utiliser le code de configuration suivant:
private ISessionFactory createSessionFactory() { return Fluently.Configure() .Database(SQLiteConfiguration.Standard.UsingFileWithPassword(filename, password)) .Mappings(m => m.FluentMappings.AddFromAssemblyOf<DBManager>()) .ExposeConfiguration(this.buildSchema) .BuildSessionFactory(); } private void buildSchema(Configuration config) { if (filename_not_exists == true) { new SchemaExport(config).Create(false, true); } }
La méthode UsingFileWithPassword (nom de fichier, mot de passe) crypte un fichier de base de données et définit le mot de passe.
Il ne s'exécute que si le nouveau fichier de base de données est créé. L'ancien non chiffré échoue lorsqu'il est ouvert avec cette méthode.
la source
Je sais que c'est une vieille question, mais la solution simple ne serait-elle pas simplement de protéger le fichier au niveau du système d'exploitation? Empêchez simplement les utilisateurs d'accéder au fichier et ils ne devraient pas pouvoir y toucher. Ce n'est qu'une supposition et je ne sais pas si c'est une solution idéale.
la source
Pourquoi avez-vous besoin de crypter la base de données? L'utilisateur pourrait facilement démonter votre programme et trouver la clé. Si vous le chiffrez pour le transfert réseau, envisagez d'utiliser PGP au lieu de presser une couche de chiffrement dans une couche de base de données.
la source