如何使用 Powershell 将托管身份用户添加到 Azure SQL 数据库?

How to add Managed Identity user to Azure SQL database with Powershell?

我正在尝试在 powershell 中创建一个部署脚本来为 Web 应用程序创建和配置环境。 Web 应用程序使用用户分配的托管身份访问 SQL 服务器。

我必须 运行 在 SQL 服务器中执行以下命令:
CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;

但是当我使用sql管理员登录时这个命令出错:"Only connections established with Active Directory accounts can create other Active Directory users."

我用 Set-AzSqlServerActiveDirectoryAdministrator

添加了一个 AD 管理员

但是如何使用此 AD 从 powershell 登录到 运行 SQL 命令?

Invoke-Sqlcmd(或至少我拥有的版本)似乎不支持 Azure AD 身份验证。

我使用了这样的 PowerShell 脚本来创建用户(您可能需要 update sqlcmd):

$query = "CREATE USER [$identityName] FROM EXTERNAL PROVIDER;"
sqlcmd -S $serverHostName -d $databaseName -G -N -U $username -t 120 -b -Q $query

那里的 -G 标志告诉它使用 Azure AD 身份验证,在这种情况下它将使用交互式身份验证并要求您登录。 如果我记得,您可以使用 -U-P 标志为 Azure AD 用户定义用户名和密码,但这仅在用户未启用 MFA 且不是联合用户。

显然 Azure AD 登录仅适用于 -ConnectionString 参数。所以解决方案是:

# Create User Managed Identity
  $mi = New-AzUserAssignedIdentity -ResourceGroupName $resourceGroupName -Name $managedIdentityName
# Enable AD login for SQL server
  Set-AzSqlServerActiveDirectoryAdministrator -ServerName $sqlServerName -ResourceGroupName $resourceGroupName -DisplayName $AdAdminUser -ObjectId $AdAdminObjectId
# Add Managed identity login to SQL server
  $connectString = "Server=tcp:$sqlServerName.database.windows.net,1433;Initial Catalog=$sqlDBName;Authentication=Active Directory Password;user=$AdAdminUser;pwd=$AdAdminPw"
  $query = "CREATE USER [$managedIdentityName] FROM EXTERNAL PROVIDER;"
  Invoke-Sqlcmd -ConnectionString $connectString -Query $query -OutputSqlErrors $true