Я использовал предложение Бена Клотье из своего совета по блогу управления блоком Office (http://blogs.office.com/2011/04/08/power-tip-improve-the-security-of-database-connections/), чтобы создать соединение с кеш-ключами без DSN, чтобы пользовательские UID и PWD не сохранялись или требовались несколько раз при работе в интерфейсе доступа , Попросите других это сделать? Если да, каким был ваш подход, когда вам нужно использовать ADO-соединение вместо DOA для доступа к SQL из Access через VBA? Как открыть соединение adodb без необходимости повторного ввода идентификатора пользователя и пароля или его поместить в код? (Я использую интерфейс Access 2013, сервер SQL 2008 R2, безопасность SQL Server) Спасибо заранее!Сохранение UID и PWD из строки соединения ADO в базе данных ODBC DSN-less и кэшированном соединении DAO?
Мой Сохраненная код подключения работает следующим образом:
Public Function InitConnect(strUserName As String, strPassword As String) As Boolean
' Description: Is called in the application’s startup
' to ensure that Access has a cached connection
' for all other ODBC objects’ use.
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Dim rst As DAO.Recordset
Dim strConnection As String
strConnection = "ODBC;DRIVER=sql server;" & _
"SERVER=******;" & _
"APP=Microsoft Office 2010;" & _
"DATABASE=******;" & _
"Network=DBMSSOCN;"
Set dbs = DBEngine(0)(0)
Set qdf = dbs.CreateQueryDef("")
With qdf
.Connect = strConnection & _
"UID=" & strUserName & ";" & _
"PWD=" & strPassword & ";"
.SQL = "Select Current_User;"
Set rst = qdf.OpenRecordset(dbOpenSnapshot, dbSQLPassThrough)
End With
InitConnect = True
ExitProcedure:
On Error Resume Next
Set rst = Nothing
Set qdf = Nothing
Set dbs = Nothing
Exit Function
End Function
Затем, когда мне нужно получить доступ к данным, я могу сделать это (обратите внимание на UID и PWD не требуется):
Dim dbs As DAO.Database
Set dbs = OpenDatabase("", False, False, "ODBC;DRIVER=sql server;SERVER=*****;APP=Microsoft Office 2010;DATABASE=*****;Network=DBMSSOCN")
я могу также установите соединение ODBC на сквозные запросы, а также в Access или VBA. Но эти соединения работают только тогда, когда строка соединения IDENTICAL соответствует тому, что первоначально использовалось в моем коде Cached Connection. Итак, когда мне нужно подключение ADODB (как кажется, иногда требуется ADO?), Строка, очевидно, не будет идентичной.
Для примера:
Dim cn As New ADODB.Connection
cn.Open "Provider = sqloledb;Data Source=*same as "SERVER"*;Initial Catalog=*same as "DATABASE"*;User Id=****;Password=****"
Этот тип подключения работает только если я поставить идентификатор пользователя и пароль. Как я могу написать это, чтобы они мне не нужны? ~ Спасибо!
Лучший способ скрыть имя пользователя и пароль - не использовать имя пользователя и пароль :-) Если возможно, подумайте об использовании [надежного соединения] (http://stackoverflow.com/a/1250556/772086) (Проверка подлинности Windows). – Mike
Я полностью согласен с Майком! Проблема в том, что я работаю удаленно из Висконсина, и у меня есть более 20 пользователей в штате Иллинойс, которые также работают как «работа», так и удаленно либо из дома, либо из рабочего компьютера на дороге. Таким образом, логистика сохранения всех этих протекционистских историй становится сложной. Кроме того, я всего лишь администратор базы данных для пары баз данных на сервере - люди выше меня не хотят иметь дело с управлением аутентификацией. – LauraNorth
У меня может быть рабочее решение, но кто-нибудь видит опасность в этом подходе, прежде чем я ставил его в качестве ответа? Я создал две общедоступные переменные «strUID» и «strPWD», которые устанавливаются, когда пользователь нажимает мой экран входа (например, «strUID» Forms! FRM_login! TxtUserID »). Затем я ссылаюсь на них, когда мне нужно использовать строку соединения ADO. Я довольно новичок в этом мире кодирования, поэтому я просто не хочу нарушать безопасность моего пользователя при любых ошибках «новичка»! Спасибо всем! – LauraNorth