密码保护SQLite数据库。 可能吗?

我不得不面对一个新的小项目。 它将有大约7或9张桌子,其中最大的一个月最多可以增长1000行。

我想SQLite作为我的数据库…但是我将需要保护数据库,以防有人想从数据库中更改数据

我的主要问题是:

是否有可能密码保护一个SQLite数据库,你会做的访问?

你会推荐什么其他的关系型数据库?

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

你可以用密码保护SQLite3数据库。 在进行任何操作之前,请首先设置密码,如下所示。

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

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

 conn.ChangePassword("new_password"); 

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

 conn.ChangePassword(String.Empty); 

您可以使用sqlite.net提供程序(System.Data.SQLite)的内置encryption。 在http://web.archive.org/web/20070813071554/http://sqlite.phxsoftware.com/forums/t/130.aspx查看更多详情;

使用SQLCipher,它是SQLite的一个开源扩展,提供数据库文件的透明256位AESencryption。 http://sqlcipher.net

你可以使用SEE插件来encryption你的SQLite数据库。 这样可以防止未经授权的访问/修改。

引用SQLite文档:

SQLiteencryption扩展(SEE)是SQLite的增强版本,它使用128位或256位AES来encryption数据库文件,以防止未经授权的访问或修改。 整个数据库文件都被encryption,所以对于外部观察者来说,数据库文件似乎包含白噪声。 没有任何东西将文件标识为SQLite数据库。

你可以在这个链接中find关于这个插件的更多信息。

对于你的密码保护你的sqlite数据库的问题,我不认为这是可以做到的。

你可以encryption它,但这里有一些信息:

http://sqlcrypt.com/

每个平台149美元。

一个选项是VistaDB 。 它们允许数据库(甚至表)被密码保护(和可选的encryption)。

如果你使用FluentNHibernate,你可以使用下面的configuration代码:

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

方法使用FileWithPassword(文件名,密码)encryption数据库文件并设置密码。
它仅在创build新数据库文件时运行。 使用此方法打开时,未encryption的旧encryption失败。

我知道这是一个古老的问题,但不是简单的解决scheme是保护在操作系统级别的文件? 只是防止用户访问该文件,然后他们不应该能够触摸它。 这只是一个猜测,我不确定这是否是一个理想的解决scheme。

litereplica支持使用ChaCha密码进行encryption,比便携式设备上的AES更快。

有许多.NET的支持。

要创build并打开encryption的数据库,我们使用这样的URI:

 "file:/path/to/file.db?cipher=...&key=..." 

为什么你需要encryption数据库? 用户可以很容易地反汇编你的程序,并找出关键。 如果您正在对networking传输进行encryption,请考虑使用PGP,而不是将encryption层压缩到数据库层。