如何使用 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
我正在尝试在 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 从 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