分享方式:


在 sqlcmd 中使用 Microsoft Entra ID 進行驗證

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW)

sqlcmd 支援各種 Microsoft Entra 驗證模型,具體取決於您已安裝的版本。

注意

雖然 Microsoft Entra ID 是 Azure Active Directory(Azure AD)的新名稱,但為了防止破壞現有的環境,Azure AD 仍會保留在某些硬式編碼元素中,例如 UI 字段、連線提供者、錯誤碼和 Cmdlet。 在本文中,這兩個名稱是可互換的。

如需有關 sqlcmd 版本之間的差異的詳細資訊,請參閱 sqlcmd 公用程式

sqlcmd (Go) 支援更多基於 azidentity 套件的 Microsoft Entra 驗證模型。 實作依賴 go-sqlcmd 驅動程式中的 Microsoft Entra 連接器。

Command line arguments

若要使用 Microsoft Entra 驗證,您可以使用兩個命令列參數的其中一個。

-G (大部分) 與 sqlcmd (ODBC) 中的使用方式相容。 如果提供使用者名稱和密碼,則會使用 Microsoft Entra 密碼驗證進行驗證。 如果提供使用者名稱,則會使用 Microsoft Entra 互動式驗證,這可能會顯示網頁瀏覽器。 如果未提供使用者名稱或密碼,則會使用 DefaultAzureCredential,其會嘗試透過各種機制進行驗證。

--authentication-method= 可用來指定下列其中一種驗證類型。

ActiveDirectoryDefault

  • 如需此模式將使用驗證類型的概觀,請參閱預設 Azure 認證
  • 如果您的資料庫自動化指令碼是要在本機開發環境和 Azure 中的生產部署中執行,請選擇這個方法。 在您的開發環境中,您可以使用用戶端密碼或 Azure CLI 登入。 不需從開發環境變更指令碼,您可以在生產部署上使用受控識別或用戶端密碼。
  • AZURE_TENANT_ID 必須設定環境變數 AZURE_CLIENT_IDDefaultAzureCredential 才能開始檢查環境設定,並尋找下列其中一個額外的環境變數,以便進行驗證:
    • 設定環境變數 AZURE_CLIENT_SECRET 會將 DefaultAzureCredential 設定為選擇 ClientSecretCredential
    • 設定環境變數 AZURE_CLIENT_CERTIFICATE_PATH 會將 DefaultAzureCredential 設定為選擇 ClientCertificateCredential (如果未設定 AZURE_CLIENT_SECRET)。
  • 設定環境變數 AZURE_USERNAME 會將 DefaultAzureCredential 設定為選擇 UsernamePasswordCredential (如果未設定 AZURE_CLIENT_SECRETAZURE_CLIENT_CERTIFICATE_PATH)。

ActiveDirectoryIntegrated

此方法目前未實作,且會回復為 ActiveDirectoryDefault

ActiveDirectoryPassword

  • 此方法使用使用者名稱和密碼進行驗證。 如果需要 MFA,則其無法運作。

  • 您可以使用一般命令列參數或 SQLCMD 環境變數來提供使用者名稱和密碼。

  • 如果未使用使用者的預設租用戶,請將 AZURE_TENANT_ID 環境變數設定為伺服器的租用戶識別碼。

ActiveDirectoryInteractive

這個方法會啟動網頁瀏覽器來驗證使用者。

ActiveDirectoryManagedIdentity

在具有系統指派或使用者指派的受控識別 Azure VM 上執行 sqlcmd (Go) 時,使用此方法。 如果使用使用者指派的受控識別,請將使用者名稱設定為受控識別的用戶端識別碼。 如果使用系統指派的身分識別,請將使用者名稱保留空白。

此範例示範如何使用服務指派的受控識別進行連線:SAMI:

-S testsrv.database.windows.net -d Target_DB_or_DW --authentication-method ActiveDirectoryManagedIdentity

此範例示範如何新增使用者指派受控識別的用戶端識別碼,以與使用者指派的受控識別連線:

-S testsrv.database.windows.net -d Target_DB_or_DW --authentication-method ActiveDirectoryManagedIdentity -U <user-assigned-managed-identity-client-id>

ActiveDirectoryServicePrincipal

這個方法會將提供的使用者名稱驗證為服務主體識別碼,並將密碼作為服務主體的用戶端密碼。 以 <service principal id>@<tenant id> 格式提供使用者名稱。 將 SQLCMDPASSWORD 變數設定為用戶端密碼。 如果使用憑證而非用戶端密碼,請將 AZURE_CLIENT_CERTIFICATE_PATH 環境變數設定為憑證檔案的路徑。

用於 Microsoft Entra 驗證的環境變數

某些 Microsoft Entra 驗證設定沒有命令列輸入,而某些環境變數會直接由 sqlcmd (Go) 所使用的 azidentity 套件取用。

這些環境變數可以設定為設定 Microsoft Entra 驗證的一些層面,以及略過預設行為。 除了先前列出的變數之外,下列變數是 sqlcmd (Go) 專用,且會套用至多個方法。

SQLCMDCLIENTID

將此環境變數設定為在 Microsoft Entra 中註冊的應用程式識別碼,此識別碼已獲授權驗證至 Azure SQL 資料庫。 適用於 ActiveDirectoryInteractiveActiveDirectoryPassword 方法。