Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 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
Все заработало!

Вариант от Мелкомягких:

Sub OpenDB()
 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.

Остается только догадываться, зачем было введено свойство "Jet OLEDB:Database Password"


Для системного пароля к базе.

Ответить

Номер ответа: 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
Попробуй найти пример строки подключения какой-нибуть другой. Не факт что предложенный тобой является правельным.

Ну для теста, попробуй этот:
dbConnectionString$ = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DataBasePath$ & ";" & _
 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-сайт: www.moto-tema.narod.ru
 Профиль | | #11
Добавлено: 25.04.08 12:44
Народ хелп надо обратное действие сделать. Т.е. Нужно изменить и поставить пароль на бд средствами vb, аdo. Возможно это вообще?

Ответить

Номер ответа: 12
Автор ответа:
 Шаман



Вопросов: 1
Ответов: 6
 Web-сайт: www.moto-tema.narod.ru
 Профиль | | #12
Добавлено: 25.04.08 12:44
Народ хелп надо обратное действие сделать. Т.е. Нужно изменить и поставить пароль на бд средствами vb, аdo. Возможно это вообще?

Ответить

Номер ответа: 13
Автор ответа:
 Abriel



Вопросов: 18
Ответов: 37
 Профиль | | #13 Добавлено: 28.04.08 21:47
Если не ошибаюсь, то установить пароль можно так:
Dim DB As Data
Dim OldPwd As String
Dim NewPwd As String
OldPwd=""
NewPwd="123"

DB.Database.NewPassword OldPwd, NewPwd

А вот как это сделать это на VB2005 с помощью OleDB - понятия не имею... :((

Ответить

Номер ответа: 14
Автор ответа:
 Шаман



Вопросов: 1
Ответов: 6
 Web-сайт: www.moto-tema.narod.ru
 Профиль | | #14
Добавлено: 29.04.08 11:44
Мне и надо на 6ом но только через ADO

Ответить

Номер ответа: 15
Автор ответа:
 fuzytsfcrew



ICQ: 314339 

Вопросов: 30
Ответов: 102
 Web-сайт: video-edit.com.ua
 Профиль | | #15
Добавлено: 13.02.10 15:44
Вот через АДО подключение с паролем:
  1.  
  2. Set sConnectionRESULT = New ADODB.Connection
  3. Set sRecordsetRESULT = New ADODB.Recordset
  4. sConnectionRESULT.Open "DSN=База данных MS Access;DBQ=" & App.Path & "\base.mdb;PWD=<b>ваш пароль</b>;UID=admin;"
  5. sRecordsetRESULT.Open "SELECT * FROM result", sConnectionRESULT, adOpenDynamic, adLockOptimistic
  6.  
  7. ...
  8. ...
  9. ...
  10. sRecordsetRESULT.Close
  11. sConnectionRESULT.Close

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам