SQLite如何实现 密码保护DB?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (1050)

我有大约7或9个表,其中最大的将以每月1000行的最大速度增长。

我把SQLite当作我的数据库..。但是,我需要保护db,以防有人想要从db中更改数据。

我的主要问题是:

是否可能像在访问时那样保护sqlitdb?

提问于
用户回答回答于

您可以密码保护SQLite3DB。在执行任何操作之前,第一次设置密码如下。

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编辑器查看您的数据。如果您提供密码,一些编辑器可以解密DB。所使用的算法是RSA。

稍后,如果希望更改密码,请使用

conn.ChangePassword("new_password");

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

conn.ChangePassword(String.Empty);
用户回答回答于

您可以使用sqlit.net提供程序(System.Data.SQLite)的内置加密。

若要打开现有加密数据库或创建新加密数据库,请在ConnectionString如上例所示,或调用SetPassword()函数在打开新的SQLiteConnection...。中指定的密码。ConnectionString必须是明文,但密码在SetPassword()函数可以是二进制字节数组。

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

扫码关注云+社区

领取腾讯云代金券