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

问题描述 投票:0回答:2

我们设置了一个 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帐户(即使用带有Azure AD MFA的Powershell连接到SQL Server)。

我发现的其他示例都添加了

UID
Password
,考虑到我已经通过了身份验证,这应该是不需要的。

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

提前致谢。

azure powershell azure-sql-database
2个回答
2
投票

阅读了越来越多的内容后,我终于偶然发现了这个帖子。 @golfalot 的答案正是我所需要的。

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

# 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()

0
投票

嗨@schmitzIT,我正在尝试为 Entra 用户身份验证方法启动 SSMS。这些用户确实启用了 MFA。使用 AutoIT,我设法注入服务器和用户名,这有助于我重定向到 Azure 门户网页,它希望在其中输入 Entra 凭据。如何使用相同的 AutoIT 脚本在网页中自动注入凭据?

© www.soinside.com 2019 - 2024. All rights reserved.