вызов файла uid и pwd в базу данных access для системы dsn - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть 5 разных файлов MS Access 2013 db, которые подключаются к системным файлам dsn (связанный сервер). На компьютере / системе dsn основаны Oracle, но проблема, с которой я сталкиваюсь, состоит в том, что 1 мой пароль не зашифрован и должен меняются каждые 90 дней и 2 Мне приходится открывать каждый файл и сохранять свой пароль несколько раз при его изменении.

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

Я гуглю более 2 дней, но не могу найти ничего, кроме просмотра строк подключения, которые по-прежнему не отображаются. решать проблему. На что мне нужно обратить внимание, чтобы решить эту проблему?

Извините, у меня нет кода, так как я просто использую мастер связанных таблиц внутри MS Access.

@ Альберт Д. Я не смог получить ваш код чтобы работать, но я сделал следующее, что решает проблему с таблицами, но не запросы Pass Through

Создал DSN файла и связал некоторые таблицы с базой данных доступа. Создан файл Excel для хранения моих имен пользователей и паролей, но мои учетные данные в сквозном запросе все еще показывают, на чем я застрял?

Option Compare Database

Function Connections()
On Error Resume Next
'delete query if exists
DoCmd.DeleteObject acQuery, "PTQ"
Err.Clear
On Error GoTo 0 '"on error" statement here

'GET EXCEL LOGIN DETAILS
Set xlsApp = CreateObject("Excel.Application")
Dim WkBk As Excel.WorkBook
Set WkBk = xlsApp.WorkBooks.Open(FileName:="C:\folderlocation\filename.xlsx")

Dim USERLIST As String
Dim PWDLIST As String

USERLIST = WkBk.Sheets(1).Range("A2").Value
PWDLIST = WkBk.Sheets(1).Range("B2").Value

If Not (xlsApp Is Nothing) Then xlsApp.Quit
'end excel stuff
Dim db As DAO.Database
Dim qdExtData As QueryDef
Dim strSQL As String
Set db = CurrentDb
'passthrough query statement
strSQL = "SELECT * FROM table"
Set qdExtData = db.CreateQueryDef("PTQ")

ServerName = "Server1"
qdExtData.Connect = "ODBC;DRIVER={Oracle in OraClient11g_home1};Server=" & ServerName & ";DBQ=Server1;UID=" & USERLIST & ";Pwd=" & PWDLIST & ""

qdExtData.SQL = strSQL
qdExtData.Close
db.Close
Set db = Nothing
End Function

Затем я устанавливаю макрос кода запуска с именем AutoExe c

1 Ответ

1 голос
/ 05 февраля 2020

Хорошо, сначала? Я бы избегал (не использовал) систему или пользовательский DSN. Причин много, но эти типы DSN требуют не только внешней ссылки, но и часто требуют повышенных прав в реестре. И что еще хуже, ваш пароль будет отображаться в простом виде.

Лучшее решение - использовать так называемое соединение без DSN. И вы можете создавать эти соединения даже без кода!

И даже лучше? Если имя сервера + базы данных НЕ изменено, а ТОЛЬКО пароль? Вы можете изменить ID пользователя + пароль, БЕЗ необходимости повторного связывания таблиц (идеально для вас с изменением пароля, но НЕ с изменением сервера + базы данных).

Еще лучше? Если вы используете небольшой код для входа в систему, вам не нужно хранить пароль в ссылках таблицы! Что это значит, если кто-то решит запустить доступ и скажет импортировать ваши связанные таблицы? Ну, во-первых, они не смогут открывать таблицы, и даже лучше, хотя uid / пароль НЕ является частью, и при этом он не сохраняется в строке соединения для каждой связанной таблицы. Как уже отмечалось, из-за этого вы можете изменить UID, и вам не нужно будет повторно связывать таблицы.

Первый шаг: сначала ВСЕГДА (но ВСЕГДА!) При связывании таблиц используйте ФАЙЛ DSN. это важно, так как при использовании в доступе FILE dsn они автоматически c преобразуются для соединений без DSN.

Другими словами, если вы связываете свои таблицы с файлом FILE dsn, то после повторного связывания таблиц вы можете даже удалить или выбросить DSN. А это значит, что вы можете развернуть связанную базу данных (front end) на любой рабочей станции. Вам не нужно будет настраивать DSN на этой рабочей станции, и на самом деле вам вообще не нужно ничего настраивать. (вам, как и раньше, конечно, потребуется драйвер базы данных oracle).

Что означает вышеизложенное при обновлении / изменении пароля, вы можете просто развернуть новый интерфейс. На самом деле, у вас, скорее всего, есть возможность автоматического обновления вашего приложения. (а если нет, то вы могли бы (должны) собрать немного кода, чтобы сделать это для вас). Итак, у вас должны быть какие-то средства для развертывания новой версии вашего программного обеспечения. В конце концов, вам ДЕЙСТВИТЕЛЬНО нужно установить свое «приложение» на каждую рабочую станцию, КАК вы делаете со всем остальным программным обеспечением, верно ???

Итак, здесь есть две части: Принятие dsn FILE для ссылок на таблицы. Как уже отмечалось, после того, как вы это сделаете, DSN вам больше не нужен. Это отлично подходит для распространения на каждую рабочую станцию.

Также УБЕДИТЕСЬ, когда вы делаете ссылку, вы НЕ устанавливаете флажок для сохранения пароля. Это делается для того, чтобы uid / пароль НЕ сохранялись в строках соединения.

Итак, если в таблицах нет uid / пароля, то как они будут работать? Что ж, вы делаете «вход» в базу данных в вашем коде запуска. Как только вы выполните этот вход в систему, все связанные таблицы будут работать! Именно этот «маленький» фрагмент кода может прочитать uid / пароль, который вы помещаете во внешний файл. Где вы разместите этот UID / пароль, зависит от вас. Это может быть встроенный код или даже какой-нибудь внешний текстовый файл, который вы читаете при запуске. И это может быть даже местный стол в передней части. (эта идея будет работать хорошо, если у вас есть какая-то автоматическая система обновления c для развертывания следующей замечательной версии вашего программного обеспечения.

Итак, с возможностью выполнить вход в систему, и не имея чтобы заново связать таблицы, у нас есть ЛЕГКО средство для изменения пароля.

Итак, вам нужно: go dsn-less. К счастью, доступ делает это по умолчанию, но ТОЛЬКО если вы используете ФАЙЛ dsn.

Получить / получить код для выполнения входа в базу данных. На самом деле, вам также нужно удалить все ссылки на таблицы. Выйдите из Access, затем перезапустите Access. Теперь запустите ваш вход в систему. код, а затем повторно связать ваши таблицы (используя созданный вами FILE dsn).

Код для входа в систему выглядит следующим образом:

  Function TestLogin(strCon As String) As Boolean

     On Error GoTo TestError

     Dim dbs          As DAO.Database
     Dim qdf          As DAO.QueryDef

     Set dbs = CurrentDb()
     Set qdf = dbs.CreateQueryDef("")

      qdf.connect = strCon

      qdf.ReturnsRecords = False

      'Any VALID SQL statement that runs on server will work below.

      qdf.sql = "SELECT 1 "
      qdf.Execute

      TestLogin = True

      Exit Function

 TestError:
      TestLogin = False
      Exit Function

  End Function

Приведенное выше, конечно, требует правильно сформированного Строка соединения.

Итак, чтобы сделать ВСЕ эту работу, вы можете принять ФАЙЛ dsn и использовать выше. Вы также соберете вместе некоторый код для построения строки подключения. Затем добавьте в свой код некоторый код для чтения внешнего файла ext или укажите UID / пароль в некоторой таблице. Этот код входа в систему, как указано выше, должен запускаться ПЕРЕД любой формой или связанной таблицей.

Весь процесс прост, но только если разбить его на правильные шаги.

Как работает этот трюк входа в систему и пример кода, не сложно, но полная статья, объясняющая этот подход, обрисована в общих чертах здесь

Совет по питанию: Повышение безопасности соединений с базой данных

https://www.microsoft.com/en-us/microsoft-365/blog/2011/04/08/power-tip-improve-the-security-of-database-connections/

...