当前位置:  开发笔记 > 编程语言 > 正文

密码保护SQLite DB.可能吗?

如何解决《密码保护SQLiteDB.可能吗?》经验,为你挑选了4个好方法。

我必须面对一个新的小项目.它将有大约7或9个表,其中最大的表将以每月1000行的最大速率增长.

我认为SQLite是我的数据库......但是如果有人想要从数据库中更改数据,我将需要保护数据库

我的主要问题是:

是否可以像访问时那样使用密码保护sqlite数据库?

对于如此小的解决方案,您会推荐哪些其他RDBMS?

开发将在C#上,但我正在寻找一些免费的东西.



1> Mangesh..:

您可以使用密码保护SQLite3 DB.在进行任何操作之前,首次按如下方式设置密码.

SQLiteConnection conn = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;");
conn.SetPassword("password");
conn.Open();

然后下次你可以访问它

conn = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;Password=password;");
conn.Open();

这不允许任何GUI编辑器查看您的数据.如果您提供密码,某些编辑者可以解密数据库.使用的算法是RSA.

稍后如果您想更改密码,请使用

conn.ChangePassword("new_password");

要重置或删除密码,请使用

conn.ChangePassword(String.Empty);



2> 小智..:

You can use the built-in encryption of the sqlite .net provider (System.Data.SQLite). See more details at http://web.archive.org/web/20070813071554/http://sqlite.phxsoftware.com/forums/t/130.aspx

To encrypt an existing unencrypted database, or to change the password of an encrypted database, open the database and then use the ChangePassword() function of 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");

To decrypt an existing encrypted database call ChangePassword() with a NULL or "" password:

// 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);

To open an existing encrypted database, or to create a new encrypted database, specify a password in the ConnectionString as shown in the previous example, or call the SetPassword() function before opening a new SQLiteConnection. Passwords specified in the ConnectionString must be cleartext, but passwords supplied in the SetPassword() function may be binary byte arrays.

// 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

默认情况下,将另一个数据库文件附加到现有连接时,ATTACH关键字将使用与主数据库相同的加密密钥.若要更改此行为,请使用KEY修饰符,如下所示:

如果使用明文密码附加加密数据库:

// 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();

使用二进制密码附加加密数据库:

// 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();


这个仅链接答案实际上是一个明显的例子,说明为什么我们不在SO处进行仅链接答案.实际的联系已经消失; 它不再存在了.我们能够看到该网站的唯一原因是因为它是由web.archive.org自动存档的.

3> 小智..:

使用SQLCipher,它是SQLite的开源扩展,为数据库文件提供透明的256位AES加密.http://sqlcipher.net



4> rogeriopvl..:

您可以使用SEE插件加密SQLite数据库.这样可以防止未经授权的访问/修改.

引用SQLite文档:

SQLite加密扩展(SEE)是SQLite的增强版本,它使用128位或256位AES加密数据库文件,以帮助防止未经授权的访问或修改.整个数据库文件已加密,因此对于外部观察者,数据库文件似乎包含白噪声.没有任何东西可以将文件标识为SQLite数据库.

您可以在此链接中找到有关此插件的更多信息.


该扩展名也是sqlite的付费插件.
推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有