Откройте MS Access со строкой подключения OLEDB и не имейте доступа, создайте файл блокировки .ldb - PullRequest
2 голосов
/ 11 мая 2009

У меня есть программа на C #, которая использует базу данных MS Access, и я использую OleDb для подключения и выполнения запросов к этой базе данных. Моя проблема в том, что у меня есть некоторая конфиденциальная информация в базе данных, и я не хочу, чтобы она отображалась как база данных Access. Я изменил расширение, но когда я его открываю, он по-прежнему создает файл блокировки .ldb, используемый Access. Я хочу, чтобы БД не создавала этот файл блокировки.

Я прочитал много сообщений по этой проблеме, и, похоже, если я открою БД в эксклюзивном режиме, он не создаст этот файл .ldb. Однако до сих пор я не нашел ни одной строки подключения для OleDb, которая позволила бы мне указать эксклюзивный доступ к БД. Объект OleDbConnection в C # также не имеет члена «Mode», поэтому об установке эксклюзивного доступа таким способом не может быть и речи.

Если у кого-либо есть какие-либо строки подключения, которые могут открыть БД в эксклюзивном режиме, или если кто-нибудь знает другой способ избежать создания файла блокировки .ldb в Access, помощь будет весьма полезна.

Ответы [ 6 ]

3 голосов
/ 11 мая 2009

Вы не можете скрыть, что это база данных Access. Любой может открыть файл в шестнадцатеричном редакторе (или даже просто в блокноте) и увидеть строку типа «Standard Jet DB» (Office 2000 / XP / 2003) или «Standard ACE DB» (Office 2007), смотрящую прямо на них. Даже если они не знают, что это значит, Google скажет им достаточно скоро. Вы можете использовать менее распространенную базу данных, но они будут иметь аналогичные недостатки.

Если вы действительно хотите обеспечить безопасность, вам придется зашифровать файл базы данных и использовать механизм, который позволит вам сохранить дешифрованную версию в памяти (IIRC sqlite поддерживает или скоро), или использовать механизм, который поддерживает шифрование изначально. Даже в этом случае могут возникнуть проблемы, если оперативная память перенесена на диск или если другой процесс «прослушивает» оперативную память вашего приложения.


Позднее обновление, но мое внимание было обращено сюда сегодня, и я хотел добавить, что практически все, кроме Access, потребует от вас распространения движка вместе с приложением. Вы также должны позаботиться о том, чтобы файлы для движка тоже не выдавали его. Access получает пропуск, потому что движок уже является частью windows. Вы также можете попробовать что-то с открытым исходным кодом, так что вы можете перекомпилировать его в основной файл приложения.

3 голосов
/ 11 мая 2009

Я бы рекомендовал использовать SQLite или другой вариант без доступа, если вы хотите избежать блокировки файлов.

Попытка избежать блокировки файлов в лучшем случае трудна. Даже если вы открываете файл в монопольном режиме, JET время от времени создает эти файлы.

Если вы пытаетесь сохранить конфиденциальные данные и хотите «скрыть» тип файла, другой хороший вариант - VistaDB . Это отдельная файловая база данных, но допускающая полное шифрование БД. Это, вероятно, будет лучшим подходом, чем просто пытаться скрыть тот факт, что вы используете JET.

3 голосов
/ 11 мая 2009

http://www.connectionstrings.com/access имеет запись для режима Эксклюзив.

0 голосов
/ 11 мая 2009

Вы также можете использовать Sql Server Compact для этого. Это бесплатно и является частью Visual Studio. Он активно используется Microsoft во многих продуктах, включая Windows Live.

0 голосов
/ 11 мая 2009

Установите SQL Server 2008 Express, используйте мастер увеличения в Access, укажите свой экземпляр Express.

0 голосов
/ 11 мая 2009

У меня есть несколько баз данных с установленным флагом Exclusive, и я все еще получаю файлы .ldb, создаваемые каждый раз, когда я открываю одну. Если вы действительно беспокоитесь о безопасности, пришло время перейти к «взрослой» базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...