簡體   English   中英

Azure SQL 使用 PowerShell 和 ServicePrincipal 為 AD 用戶授予訪問權限

[英]Azure SQL Grant Access for AD User using PowerShell and ServicePrincipal

我嘗試為 Azure SQL 服務器創建一個用戶。 我想使用 AzureAD 用戶。

這是代碼:

$accessToken = $(az account get-access-token --resource https://database.windows.net/ --query accessToken -o tsv --subscription ${data.azurerm_client_config.current.subscription_id})
$sqlConnection = New-Object System.Data.SqlClient.SqlConnection
$sqlConnection.ConnectionString = "Data Source = ${azurerm_sql_server.server.fully_qualified_domain_name}; Initial Catalog = ${azurerm_sql_database.sqldb.name}"
$sqlConnection.AccessToken = $accessToken
$sqlConnection.Open()
$sqlCmd = New-Object System.Data.SqlClient.SqlCommand
$sqlCmd.Connection = $sqlConnection
$sqlCmd.CommandText = "CREATE USER [someone.name_domain.com#EXT#@rootdomain.onmicrosoft.com] FROM EXTERNAL PROVIDER"
$sqlCmd.ExecuteNonQuery()

用於生成令牌的 azure 命令行使用服務主體進行身份驗證。 服務主體定義為使用 AAD 組的azurerm_sql_active_directory_administrator 我收到以下錯誤

MethodInvocationException: 
Line |
  11 |  $sqlCmd.ExecuteNonQuery()
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~
     | Exception calling "ExecuteNonQuery" with "0" argument(s): "Principal 'someone.name_domain.com#EXT#@rootdomain.onmicrosoft.com' could not be resolved. Error message: ''"

如果我將 SqlCommand 更改為: SELECT * FROM sys.database_principals 我可以查詢結果。 因此,我認為身份驗證本身不是問題。 另一方面,當使用我的活動目錄用戶(屬於同一 AAD 組的一部分)而不是服務主體登錄 azure cli 時, CREATE USER...命令有效並創建了用戶。

我想以自動化方式運行代碼,因此我需要它與我的服務主體一起使用。 有什么可以做的嗎?

Azure SQL 數據庫暫時不允許服務主體創建用戶。

但其他人找到了一些解決方法來解決這個問題: 在此處輸入圖像描述

微軟MSFT確認無誤,官方教程即將發布:

  1. 將服務器身份分配給 Azure SQL 邏輯服務器

    Set-AzSqlServer -ResourceGroupName -ServerName <服務器名稱> -AssignIdentity

  2. 授予Directory Readers對服務器身份的權限。

請參考此博客:

  1. 由服務主體從外部提供者創建用戶
  2. https://github.com/MicrosoftDocs/sql-docs/issues/4959

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM