我有一个MS Access数据库作为Azure SQL Server后端的前端。我需要使用ADO和ODBC连接字符串用于不同的功能(执行后端任务,链接前端表)。我正在使用Azure Active Directory交互式身份验证。第一次在前端使用这些连接字符串时,它会提示用户输入他们的Microsoft密码(因此用户总是输入两次密码—一次用于ADO,另一次用于ODBC)。我四处寻找答案,但似乎找不到一个-我只是想让用户对每个会话进行一次身份验证。
关于如何使用Azure AD连接到SQL Server数据库的其他问题,但他们没有回答这个特定的问题,因为我已经成功连接了。
我使用ConnectionString函数传入"ADO"或";ODBC"这取决于我需要什么。以下是连接字符串(它们都可以)。
Select Case connectionType
Case "ADO":
ConnectionString = "Provider=MSOLEDBSQL19;" & _
"Data Source=" & serverName & ";" & _
"Initial Catalog=" & databaseName & ";" & _
"Authentication=ActiveDirectoryInteractive;" & _
"User ID=" & userEmail & ";" & _
"Use Encryption for Data=true;"
Case "ODBC":
ConnectionString = "ODBC;" & _
"DRIVER=ODBC Driver 17 for SQL Server;" & _
"SERVER=" & serverName & ";" & _
"DATABASE=" & databaseName & ";" & _
"UID=" & userEmail & ";" & _
"Authentication=ActiveDirectoryInteractive;" & _
"Encrypt=yes;"
End Select
我试过改变ODBC连接字符串认证=ActiveDirectoryIntegrated(没有密码输入),但它不起作用。在这种情况下,由于他们公司的安全设置方式,用户将不能仅仅使用他们的Windows凭据。在这种情况下,我也不能使用硬编码的用户名/密码。
任何建议将被感激,因为这是功能性的,但绝对是一个头痛的用户!
谢谢你@June7 -你让我走上正轨,想出了这个解决方案。我使用了"activedirectorypassword"。作为验证类型,但它一直抛出与无效凭据相关的错误。我尝试了一些选项,最终解决了问题:对第一个(ADO)连接使用交互式身份验证,然后对第二个(ODBC)连接使用集成身份验证。由于用户在第一次连接后进行了身份验证,因此第二次连接不要求任何输入。
Select Case connectionType
Case "ADO":
ConnectionString = "Provider=MSOLEDBSQL19;" & _
"Data Source=" & serverName & ";" & _
"Initial Catalog=" & databaseName & ";" & _
"Authentication=ActiveDirectoryInteractive;" & _
"User ID=" & userEmail & ";" & _
"Use Encryption for Data=true;"
Case "ODBC":
ConnectionString = "ODBC;" & _
"DRIVER=ODBC Driver 17 for SQL Server;" & _
"SERVER=" & serverName & ";" & _
"DATABASE=" & databaseName & ";" & _
"UID=" & userEmail & ";" & _
"Authentication=ActiveDirectoryIntegrated;" & _
"Encrypt=yes;"
End Select