密码保护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关于这个插件的更多信息。
一个选项是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层压缩到数据库层。