Страница: 1 | 2 |
Вопрос: MDB, защищенная паролем
Добавлено: 21.02.08 19:49
Автор вопроса: Acca
Хотя эта тема здесь и не только здесь поднималась неоднократно, кажется, по прежнему остается не решенной (двухчасовой поиск по всему нету не дал результата).
Итак, проблема:
Необходимо из VB (кстати, как оказалось, язык не имеет значения) получить доступ к Access'овсому файлу (Access 2000), запороленному на уровне базы. Приведу пример реализации через ConnectionString:
Dim fs As New ADODB.Connection
ConnectionString= "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & dbName & "; Persist Security Info=False; Jet OLEDB:Database Password=" & pwd
fs.Open ConnectionString
При выполнении - ошибка "Ошибочный пароль". Естественно пароль вводится верный и и в Access все нормально открывается. Подозревал кодировку: пробывал использовать только цифры, не помогло.
Использование DBEngine не помогло.
Может быть это ошибка в самом провайдере?
Кому-нибудь удалось с этим справится?
Ответы
Всего ответов: 17
Номер ответа: 1
Автор ответа:
el-paso
Вопросов: 3
Ответов: 164
Профиль | | #1
Добавлено: 21.02.08 20:55
Насколько я знаю (точнее, как меня учили), механизм безопасности такого не предусматривает.
Пароль на уровне базы нужен лишь для ее переноса с носителя на носитель или для исключительно приватных целей.
При использовании ее на сервере пароль может быть установлен только на уровне системы (группы, пользователи и т.п.), иначе базу открыть невозможно.
И провайдер соединения тут не при чем. В ConnectionString можно указать только системный пароль к базе.
Номер ответа: 2
Автор ответа:
Acca
Вопросов: 2
Ответов: 5
Профиль | | #2
Добавлено: 21.02.08 21:10
Иными словами, только для блокирования доступа в Access и только набором "ручками" во всплывающем окне безопасности?
Остается только догадываться, зачем было введено свойство "Jet OLEDB:Database Password"...
Номер ответа: 3
Автор ответа:
Acca
Вопросов: 2
Ответов: 5
Профиль | | #3
Добавлено: 21.02.08 21:21
http://support.microsoft.com/kb/235422
Достаточно интересно
Номер ответа: 4
Автор ответа:
Acca
Вопросов: 2
Ответов: 5
Профиль | | #4
Добавлено: 21.02.08 22:00
Все заработало!
Вариант от Мелкомягких:
Dim db As DAO.Database
Dim ws As DAO.WorkSpace
Dim rst As DAO.Recordset
Set ws = DBEngine.WorkSpaces(0)
Set db = ws.OpenDatabase _
 "C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb", _
False, False, "MS Access;PWD=northwind"
Set rst = db.OpenRecordset("Customers", dbOpenDynaset)
If rst.RecordCount > 0 Then
rst.MoveLast
MsgBox rst!CustomerID
End If
rst.Close
db.Close
End Sub
Как видите, работает только через DAO. И, по всей видимости, есть ограничение на длину пароля. 8D949E9B985BB441A5A6565C5D5E4F такой пароль DAO явно смущал
Хотелось бы конечно найти все-ж работающую реализацию под ADO. Последний поизящнее и лаконичнее будет.
Номер ответа: 5
Автор ответа:
el-paso
Вопросов: 3
Ответов: 164
Профиль | | #5
Добавлено: 21.02.08 22:01
Ну, молодец.
Вот теперь и открывай через DAO - родную библиотеку Access.
Для системного пароля к базе.
Номер ответа: 6
Автор ответа:
el-paso
Вопросов: 3
Ответов: 164
Профиль | | #6
Добавлено: 21.02.08 22:03
Да-да.. То, о чем я и говорил.
ADO тебе не помощник..
Номер ответа: 7
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #7
Добавлено: 22.02.08 01:25
:\ el-paso, ну ты мозк ))) no comment :D
2 Acca
Попробуй найти пример строки подключения какой-нибуть другой. Не факт что предложенный тобой является правельным.
Ну для теста, попробуй этот:
IIf(Trim(Password) <> "", "Jet OLEDB:Database Password=" & Trim$(Password$) & ";", ""
Номер ответа: 8
Автор ответа:
Acca
Вопросов: 2
Ответов: 5
Профиль | | #8
Добавлено: 22.02.08 10:18
Уже пробывал: указывал пароль в явном виде. Работать не стало
Номер ответа: 9
Автор ответа:
el-paso
Вопросов: 3
Ответов: 164
Профиль | | #9
Добавлено: 22.02.08 16:12
Конечно, мозк.. А то..
А вообще.. Я ж не из пальца высосал инфу, а рассказываю, как мне объяснили в инсте.
А если справитесь на ADO, тогда пойду к преподу с претензиями...
Номер ответа: 10
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #10
Добавлено: 23.02.08 23:25
Ну вообще-то DAO устаревшая технология, от которой отказались ещё бог знает в каком Accsess'e. Хотя преподы твои конечно о таком и не слышали, им незачем, они ж не программисты - они преподы. Сейчас и ADO то уже не используют, вместо него - ADO.NET.
Номер ответа: 11
Автор ответа:
Шаман
Вопросов: 1
Ответов: 6
Web-сайт:
Профиль | | #11
Добавлено: 25.04.08 12:44
Народ хелп надо обратное действие сделать. Т.е. Нужно изменить и поставить пароль на бд средствами vb, аdo. Возможно это вообще?
Номер ответа: 12
Автор ответа:
Шаман
Вопросов: 1
Ответов: 6
Web-сайт:
Профиль | | #12
Добавлено: 25.04.08 12:44
Народ хелп надо обратное действие сделать. Т.е. Нужно изменить и поставить пароль на бд средствами vb, аdo. Возможно это вообще?
Номер ответа: 13
Автор ответа:
Abriel
Вопросов: 18
Ответов: 37
Профиль | | #13
Добавлено: 28.04.08 21:47
Если не ошибаюсь, то установить пароль можно так:
Dim OldPwd As String
Dim NewPwd As String
OldPwd=""
NewPwd="123"
DB.Database.NewPassword OldPwd, NewPwd
А вот как это сделать это на VB2005 с помощью OleDB - понятия не имею... (
Номер ответа: 14
Автор ответа:
Шаман
Вопросов: 1
Ответов: 6
Web-сайт:
Профиль | | #14
Добавлено: 29.04.08 11:44
Мне и надо на 6ом но только через ADO
Номер ответа: 15
Автор ответа:
fuzytsfcrew
ICQ: 314339
Вопросов: 30
Ответов: 102
Web-сайт:
Профиль | | #15
Добавлено: 13.02.10 15:44
Вот через АДО подключение с паролем: