Powershell-使用Connect AzAccount(使用MFA)连接到SQL Server



我们设置了一个SQL Server(由我创建,我的帐户作为管理帐户(,使用Management Studio,我可以很好地访问数据库。我现在正试图通过Powershell实现同样的目标。我已经创建了我自己的用户使用:

CREATE USER [<my ccount>] FROM EXTERNAL PROVIDER

我首先使用MFA连接(并使用弹出窗口/MFA登录(:

Connect-AzAccount -SubscriptionId $subscriptionID

这很好,并返回指定订阅的预期值,以及我的Azure AD登录帐户。我可以访问我的KeyVault并从中提取秘密。

我现在想使用PowerShell会话中已经登录的凭据连接到我的SQL Server,这就是我遇到的问题。

我尝试了一个包含Authentication=Active Directory Integrated的ConnectionString,但它抛出了一个错误Exception calling "Open" with "0" argument(s): "One or more errors occurred."

然后我尝试使用这样的连接字符串:Server=tcp:<server>.database.windows.net,1433;Initial Catalog=<database>;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30,并使用SqlConn.AccessToken = $(Get-AzAccessToken -ResourceUrl "Https://database.windows.net/")添加一个AccessToken。

然而,当我尝试打开连接时,我得到了错误:"Login failed for user '<token-identified principal>'."

谷歌搜索了几篇SO文章,但都没有使用Connect AzAccount,而是使用(我认为已经过时的(Az Account(即使用带有Azure AD MFA的Powershell连接到SQL Server(。

我发现的其他示例都添加了UIDPassword,考虑到我已经进行了身份验证,应该不需要它们。

有没有一种方法可以使用现有的Connect AzAccount会话对我的Azure SQL Server进行身份验证?如果有,ConnectionString应该采用什么格式?我有一种感觉,我离解决方案很近了,但似乎无法真正实现连接的开放。

提前谢谢。

在阅读了越来越多之后,我终于偶然发现了这个线程@戈法洛的回答正是我所需要的。

因此,初始化连接的正确代码是:

# Sign in to Azure
Connect-AzAccount -SubscriptionID $subscriptionID
$connectionString = "Server=<server>.database.windows.net;Initial Catalog=<database>;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30"
$accessToken = (Get-AzAccessToken -ResourceUrl https://database.windows.net).Token
$sqlConn = New-Object System.Data.SqlClient.SqlConnection
$sqlConn.ConnectionString = $connectionString
$sqlConn.AccessToken = $accessToken
$sqlConn.Open()

相关内容

  • 没有找到相关文章

最新更新