使用OLEDB连接字符串打开MS Access并且无权访问创建.ldb锁定文件

时间:2009-05-11 18:14:32

标签: c# ms-access

我在C#中有一个使用MS Access数据库的程序,我正在使用OleDb连接并对该数据库进行查询。我的问题是我在数据库中有一些敏感信息,我不希望它显示为Access DB。我更改了扩展名,但是当我打开它时,它仍然会创建Access使用的.ldb锁定文件。我想让DB不创建该锁文件。

我已经阅读了很多关于这个问题的帖子,听起来好像我在独家模式下打开数据库,它不会创建.ldb文件。但是,到目前为止,我还没有找到OleDb的任何连接字符串,它允许我指定对数据库的独占访问权限。 C#中的OleDbConnection对象也没有“模式”成员,因此以这种方式设置独占访问是不可能的。

如果有人有任何连接字符串可以在独占模式下打开数据库,或者如果有人知道另一种方法可以避免在Access中创建.ldb锁定文件,那么非常感谢帮助。

6 个答案:

答案 0 :(得分:3)

http://www.connectionstrings.com/access有一个独家模式条目。

答案 1 :(得分:3)

如果您想避免锁定文件,我建议您使用SQLite或其他非访问选项。

尽量避免锁定文件很困难。即使您以独占模式打开文件,JET也会创建这些文件。

如果您尝试存储敏感数据,并且想要“隐藏”文件类型,则另一个不错的选择是VistaDB。它是单个文件数据库,但允许完全DB加密。这可能是一个更好的方法,而不仅仅是试图掩盖你正在使用JET的事实。

答案 2 :(得分:3)

你无法隐藏它是一个Access数据库。任何人都可以在十六进制编辑器(甚至只是记事本)中打开文件,看到像“Standard Jet DB”(Office 2000 / XP / 2003)或“Standard ACE DB”(Office 2007)这样的字符串他们。即使他们不知道这意味着谷歌会尽快告诉他们。你可以使用一个不太常见的数据库,但它们会有类似的弱点。

如果你真的想要安全性,你将不得不加密数据库文件并使用一个引擎,让你在内存中保存一个解密版本(IIRC sqlite支持这个,或者很快)或使用支持的引擎本地加密。即使这样,如果ram被分页到光盘或另一个进程“嗅探”你的应用程序的ram,你可能会遇到问题。


最新的更新,但今天我的注意力被放回到这里,我想添加几乎任何东西,但Access将要求您使用应用程序分发引擎。您还需要注意引擎的文件也不要放弃它。 Access获得通过,因为引擎已经是Windows的一部分。您也可以尝试一些开源的东西,这样您就可以将它重新编译到主应用程序文件中。

答案 3 :(得分:0)

我有几个设置了Exclusive标志的数据库,每次打开一个时我仍会创建.ldb文件。如果你真的担心安全问题,那么就该搬到“成熟”的数据库了。

答案 4 :(得分:0)

安装SQL Server 2008 Express,在Access中使用upsize向导,指向Express实例。

答案 5 :(得分:-2)

您也可以使用Sql Server Compact来执行此操作。它是免费的,是Visual Studio的一部分。它在很多产品中都被积极使用,包括Windows Live。