我們設定了一個 SQL Server(由我創建,我的帳戶作為管理員帳戶),并且使用 Management Studio,我可以很好地訪問資料庫。我現在正試圖通過 Powershell 實作同樣的目標。我使用以下方法創建了自己的用戶:
CREATE USER [<my ccount>] FROM EXTERNAL PROVIDER
我首先使用 MFA 連接(并使用彈出視窗/MFA 登錄):
Connect-AzAccount -SubscriptionId $subscriptionID
這作業正常,并回傳指定訂閱的預期值,以及我的 Azure AD 登錄帳戶。我可以訪問我的 KeyVault 并從那里提取秘密。
我現在想使用我已經在 PowerShell 會話中登錄的憑據連接到我的 SQL Server,這就是我卡住的地方。
我嘗試了一個 ConnectionString 包括Authentication=Active Directory Integrated
,但這會引發錯誤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
,并使用 添加 AccessToken SqlConn.AccessToken = $(Get-AzAccessToken -ResourceUrl "Https://database.windows.net/")
。
但是,當我嘗試打開連接時,出現錯誤:"Login failed for user '<token-identified principal>'."
谷歌搜索導致了幾篇 SO 文章,但沒有一篇使用 Connect-AzAccount,而是(我認為已經過時的)Az Account(即使用 Powershell 和 Azure AD MFA 連接到 SQL Server)。
我發現的其他示例都是 add UID
and Password
,考慮到我已經通過身份驗證,應該不需要這些示例。
有沒有辦法使用現有的 Connect-AzAccount 會話對我的 Azure SQL Server 進行身份驗證,如果是這樣,ConnectionString 應該有什么格式?我有一種感覺,我非常接近解決方案,但似乎無法真正實作連接的打開。
提前致謝。
uj5u.com熱心網友回復:
在閱讀越來越多之后,我終于偶然發現了這個執行緒。@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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/524892.html
標籤:天蓝色电源外壳天蓝色 sql 数据库
上一篇:Foreach-Object-Parallel回傳“‘write-host’一詞未被識別為cmdlet、函式、腳本檔案或可執行程式的名稱”