【问题标题】:Failing to connect to Azure SQL database (PowerShell) via a service principal account无法通过服务主体帐户连接到 Azure SQL 数据库 (PowerShell)
【发布时间】:2022-11-11 19:57:48
【问题描述】:

我正在尝试通过服务主体(通过 PowerShell 脚本)建立与 Azure SQL 数据库的连接。

我相信我已遵循 Microsoft 发布的指导,但无法建立连接。我目前的配置是:

  • Azure SQL Server 已设置 AAD 管理员(AAD 组)
  • AAD 组包含一个服务主体帐户(手动创建)
  • Azure SQL Server 具有系统托管标识(并分配有目录读取者角色)

据我了解,我不需要为服务主体显式执行CREATE USER,因为它已经是 Azure SQL Server 上的管理员 AAD 组的成员。

我尝试过 Azure CLI 和 AZ 模块命令,但均无济于事。 举个例子:

az login --service-principal -u "***" -p="***" --tenant "***"
$accessToken = az account get-access-token --resource https://database.windows.net --query accessToken
Invoke-Sqlcmd -ServerInstance "***.database.windows.net" -Database "***" -AccessToken $accessToken -Query "SELECT GETUTCDATE()"

以上在 Invoke-Sqlcmd Invoke-Sqlcmd: Login failed for user '<token-identified principal>' 上生成错误

我也尝试过清理访问令牌(注意到它以" 开始/结束),这样做的错误大致相同,但它确实报告了实际的服务主体(按 ID)

$accessToken = $accessToken -replace """", ""

产生错误Invoke-Sqlcmd: Login failed for user '***@***'

【问题讨论】:

    标签: azure azure-sql-database azure-cli azure-sql-server


    【解决方案1】:

    问题是由于服务主体的角色分配“读者角色”引起的

    通过服务主体建立与 Azure SQL 数据库的连接时,我们需要做两件事

    1. 添加贡献者服务主体 ID 的角色

    2. 允许来自具有允许网络 IP 范围的 sql server 防火墙的端口 1433。

    3. 在使用 Azure Data Studio 测试角色分配后。能够连接没有任何问题。 注意:确保防火墙规则需要与 1433 端口一起允许。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-24
      • 2020-09-29
      • 1970-01-01
      • 2020-04-21
      • 2016-09-05
      • 1970-01-01
      • 2019-12-07
      • 1970-01-01
      相关资源
      最近更新 更多