96 votes

Protéger par mot de passe une base de données SQLite. Est-ce possible ?

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 base de données... Mais j'aurai besoin de protéger la base de données au cas où quelqu'un voudrait modifier les données de la base.

Ma principale question est la suivante :

Est-il possible de protéger par un mot de passe une base de données sqlite comme on le ferait sur Access ?

Le développement se ferait en C#, mais je cherche quelque chose de gratuit.

2 votes

Vous pourriez vouloir vérifier SQLiteCrypt

1 votes

0 votes

Si vous avez besoin de verrouiller/déverrouiller fréquemment la DB pour le débogage, essayez cet outil goo.gl/12VnQd

76voto

MangeshGhotage Points 40

Vous pouvez protéger une base de données SQLite3 par un mot de passe. 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 ne permettra pas à un éditeur GUI de visualiser vos données. Certains éditeurs peuvent décrypter 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 la fonction

conn.ChangePassword("new_password");

Pour réinitialiser ou supprimer le mot de passe, utilisez

conn.ChangePassword(String.Empty);

0 votes

Le seul outil gratuit que j'ai trouvé jusqu'à présent et qui permet d'ouvrir des bases de données protégées par mot de passe comme celle-ci est le suivant SQLite2009 Pro détaillé dans cette réponse .

0 votes

Quelle est la langue de cet exemple ? On dirait du .NET ?

1 votes

Techniquement, .NET est un cadre. C# est le langage affiché ici.

34voto

Liron Levi Points 701

Vous pouvez utiliser le cryptage intégré du fournisseur sqlite .net (System.Data.SQLite). Pour plus de détails, voir http://web.archive.org/web/20070813071554/http://sqlite.phxsoftware.com/forums/t/130.aspx

A crypter une base de données existante non cryptée ou pour changer le mot de passe d'une base de données chiffré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");

A décrypter une base de données chiffrée existante appelez ChangePassword() avec un NULL o "" mot de passe :

// 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 cryptée existante, ou pour créer une nouvelle base de données cryptée, spécifiez un mot de passe dans le champ de saisie du mot de passe. ConnectionString comme indiqué dans l'exemple précédent, ou appelez la fonction SetPassword() avant d'ouvrir une nouvelle SQLiteConnection . Les mots de passe spécifiés dans le ConnectionString doit être en clair, mais les mots de passe fournis dans le champ SetPassword() 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 cryptage que la base de données principale lors de l'attachement d'un autre fichier de base de données à une connexion existante. Pour changer ce comportement, vous utilisez le modificateur KEY comme suit :

Si vous joignez une base de données chiffrée en utilisant un mot de passe en 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 joindre une base de données cryptée en utilisant 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();

2 votes

Cette réponse en lien seulement est en fait un exemple clair de la raison pour laquelle nous ne faisons pas de réponses en lien seulement à l'OS. Le lien réel a disparu ; il n'existe plus. La seule raison pour laquelle nous sommes en mesure de voir le site est qu'il a été automatiquement archivé par web.archive.org.

0 votes

Cela ne fonctionne plus, aucune fonction de ce type n'a été trouvée dans les dernières versions.

13voto

Avdaff Points 81

Utilisez SQLCipher, il s'agit d'une extension opensource pour SQLite qui fournit un chiffrement AES 256 bits transparent des fichiers de base de données. http://sqlcipher.net

2 votes

Et la vitesse ? Si j'utilise sqlcipher, cela réduira-t-il les performances ?

0 votes

Toute solution robuste pour ce cas sera basée sur un algo de cryptage symétrique, même dans le cas de RSA. Le RSA (mentionné précédemment) ne sera utilisé que pour chiffrer la clé de l'algorithme symétrique et non pour chiffrer quoi que ce soit avec le RSA. AES256 est un algorithme symétrique très performant et l'un des plus sûrs. L'utiliser directement semble être un bon choix. Faites attention à la clé !

3voto

John Boker Points 36308

Pour votre question sur la protection par mot de passe de votre base de données sqlite, je ne pense pas que cela soit possible.

vous pouvez le crypter, voici quelques informations à ce sujet :

http://sqlcrypt.com/

c'est 149 dollars par plateforme.

3voto

Reed Copsey Points 315315

Une option serait VistaDB . Ils permettent de protéger les bases de données (ou même les tables) par un mot de passe (et éventuellement de les crypter).

1 votes

Il existe des moyens plus efficaces et gratuits !

1 votes

@MSS Mais - comme je l'ai dit, la solution VistaDB présente certains avantages, notamment un cryptage séparé au niveau de la table au lieu d'un cryptage complet de la connexion DB. Je ne connais aucune autre option native de .NET qui permette d'accomplir cela. Elle est également purement gérée, contrairement à la plupart des autres options - le fait qu'elle ne soit pas gratuite ne signifie pas qu'il existe des options plus efficaces ou meilleures - cela dépend entièrement des exigences d'utilisation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X