通过PowerShell获取Azure数据库详情时如何获取用户名和密码?
解决Azure SQL Server管理员密码获取及Invoke-SqlCmd使用问题
Azure通过Get-AzSqlServer返回的服务器对象中SqlAdministratorPassword为空是安全设计——Azure不会通过API返回敏感的管理员密码,防止泄露风险。要解决Invoke-SqlCmd的密码需求,可采用以下几种方案:
1. 从Azure Key Vault读取已存储的密码(推荐)
如果之前将SQL管理员密码存入了Azure Key Vault,可直接通过PowerShell读取:
# 假设密码已存入Key Vault,密钥名称为sql-admin-password $vaultName = "your-key-vault-name" $secretName = "sql-admin-password" $securePassword = Get-AzKeyVaultSecret -VaultName $vaultName -Name $secretName -AsPlainText # 在Invoke-SqlCmd中使用 Invoke-SqlCmd -ServerInstance $db.ServerName -Database $db.DatabaseName ` -Username $server.SqlAdministratorLogin -Password $securePassword ` -Query 'select * from [dbo].[TableName]'
2. 交互式输入密码(适合手动执行脚本)
如果脚本是手动运行,可通过交互式方式获取密码,避免硬编码:
$securePassword = Read-Host "请输入SQL管理员密码" -AsSecureString $plainPassword = [System.Net.NetworkCredential]::new("", $securePassword).Password Invoke-SqlCmd -ServerInstance $db.ServerName -Database $db.DatabaseName ` -Username $server.SqlAdministratorLogin -Password $plainPassword ` -Query 'select * from [dbo].[TableName]'
3. 重置管理员密码(若未存储或忘记密码)
如果没有保存密码,可直接重置SQL服务器的管理员密码,然后使用新密码:
# 重置密码 $newPassword = "YourNewStrongPassword123!" Set-AzSqlServer -ResourceGroupName $server.ResourceGroupName -ServerName $server.ServerName ` -SqlAdministratorPassword (ConvertTo-SecureString $newPassword -AsPlainText -Force) # 使用新密码执行查询 Invoke-SqlCmd -ServerInstance $db.ServerName -Database $db.DatabaseName ` -Username $server.SqlAdministratorLogin -Password $newPassword ` -Query 'select * from [dbo].[TableName]'
注意:此操作会更改SQL服务器的管理员密码,需确保其他依赖该密码的服务不受影响。
4. 使用Azure AD身份验证替代SQL密码(更安全)
避免处理密码的最佳方式是使用Azure AD身份验证,无需输入SQL管理员密码:
# 使用当前登录Azure的AD账户身份验证 Invoke-SqlCmd -ServerInstance $db.ServerName -Database $db.DatabaseName ` -Authentication ActiveDirectoryDefault ` -Query 'select * from [dbo].[TableName]' # 或指定特定AD用户 Invoke-SqlCmd -ServerInstance $db.ServerName -Database $db.DatabaseName ` -Authentication ActiveDirectoryPassword ` -Username "your-aad-user@domain.com" -Password "your-aad-password" ` -Query 'select * from [dbo].[TableName]'
需确保AD账户已被授予SQL数据库的访问权限。
内容的提问来源于stack exchange,提问作者Veronica
相关产品推荐
相关产品推荐

