You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell中使用AAD SSO账号执行Azure SQL查询?

解决Azure Cloud Shell中PowerShell用AAD身份执行Invoke-Sqlcmd的Kerberos认证问题

在Azure Cloud Shell的PowerShell环境中,若要以当前SSO登录的AAD用户身份执行SQL查询(例如创建AAD外部用户),直接调用Invoke-Sqlcmd会触发Kerberos认证错误——这是因为Cloud Shell环境无法初始化Kerberos,且常规的账号密码方式不符合当前AAD身份的需求。以下是可行的解决方案,完全模拟Azure数据库查询编辑器的AAD认证流程,无需输入密码:

核心方案:使用AAD访问令牌认证

Azure SQL支持通过AAD访问令牌直接认证,这也是数据库查询编辑器的底层认证逻辑,适配Cloud Shell的SSO环境:

  1. 获取Azure SQL的AAD访问令牌
    利用Cloud Shell中已登录的AAD会话,直接获取针对Azure SQL资源的访问令牌:

    $accessToken = (Get-AzAccessToken -ResourceUrl https://database.windows.net).Token
    

    这里的https://database.windows.net是Azure SQL的固定资源ID,必须准确填写。

  2. 构造带令牌的连接字符串并执行查询
    用获取到的令牌构造符合Active Directory Access Token认证格式的连接字符串,再传入Invoke-Sqlcmd:

    $serverName = 'your-server-name.database.windows.net'
    $dbName = 'your-database-name'
    $query = 'CREATE USER [AAD_User] FROM EXTERNAL PROVIDER;'
    
    $connectionString = "Server=tcp:$serverName,1433;Database=$dbName;Authentication=Active Directory Access Token;UID=任意字符串;PWD=$accessToken;"
    Invoke-Sqlcmd -ConnectionString $connectionString -Query $query
    

    注意:UID字段可填写任意字符串,仅用于满足连接字符串格式要求,实际身份由令牌决定。

注意事项

  • 确保当前AAD用户拥有目标数据库的对应权限(例如创建外部用户需要ALTER ANY USER权限)
  • 目标Azure SQL服务器已配置AAD管理员,且当前用户被授权访问该数据库
  • Get-AzAccessToken依赖Az.Accounts模块,Cloud Shell默认已预装,本地环境需提前安装:Install-Module -Name Az.Accounts -Force

备选方案(仅适用于有界面环境)

若使用本地有界面的PowerShell环境,且SqlServer模块版本≥v21.1.18256,可直接指定交互式AAD认证:

Invoke-Sqlcmd -ServerInstance $serverName -Database $dbName -Query $query -Authentication ActiveDirectoryInteractive

但此方式在Cloud Shell的无头环境中无法弹出认证窗口,不适用当前场景。

内容的提问来源于stack exchange,提问作者new_programmer_22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 08:05:23