Хорошо, сначала? Я бы избегал (не использовал) систему или пользовательский 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/