Azure SQL 使用 PowerShell 和 ServicePrincipal 为 AD 用户授予访问权限

2023-12-12

我尝试为 Azure SQL Server 创建用户。我想使用 AzureAD 用户。

这是代码:

$accessToken = $(az account get-access-token --resource https://database.windows.net/ --query accessToken -o tsv --subscription ${data.azurerm_client_config.current.subscription_id})
$sqlConnection = New-Object System.Data.SqlClient.SqlConnection
$sqlConnection.ConnectionString = "Data Source = ${azurerm_sql_server.server.fully_qualified_domain_name}; Initial Catalog = ${azurerm_sql_database.sqldb.name}"
$sqlConnection.AccessToken = $accessToken
$sqlConnection.Open()
$sqlCmd = New-Object System.Data.SqlClient.SqlCommand
$sqlCmd.Connection = $sqlConnection
$sqlCmd.CommandText = "CREATE USER [someone.name_domain.com#EXT#@rootdomain.onmicrosoft.com] FROM EXTERNAL PROVIDER"
$sqlCmd.ExecuteNonQuery()

用于生成令牌的 azure 命令行使用服务主体进行身份验证。服务主体定义为azurerm_sql_active_directory_administrator使用 AAD 组。我收到以下错误

MethodInvocationException: 
Line |
  11 |  $sqlCmd.ExecuteNonQuery()
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~
     | Exception calling "ExecuteNonQuery" with "0" argument(s): "Principal 'someone.name_domain.com#EXT#@rootdomain.onmicrosoft.com' could not be resolved. Error message: ''"

如果我将 SqlCommand 更改为:SELECT * FROM sys.database_principals。我可以查询结果。因此我认为身份验证本身不是问题。 另一方面,当使用我的 Active Directory 用户(属于同一 AAD 组)而不是服务主体登录 azure cli 时,CREATE USER ...命令有效并且用户已创建。

我想自动化运行代码,因此我需要它与我的服务主体一起工作。有什么办法可以让这项工作成功吗?


Azure SQL 数据库目前不允许服务主体创建用户。

But others have found some workaround to solve the issue: enter image description here

微软MSFT确认无误,官方教程即将发布:

  1. 将服务器标识分配给 Azure SQL 逻辑服务器

    Set-AzSqlServer -ResourceGroupName-ServerName-AssignIdentity

  2. 授予目录读者服务器身份的权限。

请参考此博客:

  1. 通过服务主体从外部提供商创建用户
  2. https://github.com/MicrosoftDocs/sql-docs/issues/4959

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Azure SQL 使用 PowerShell 和 ServicePrincipal 为 AD 用户授予访问权限 的相关文章

  • 无法使用专用终结点将 Azure Function 与 Azure SQL 连接

    我创建了一个 SQL Server 然后使用私有 IP 创建了与我的 TESTVNET SUBNET1 的私有链接10 1 1 4 我现在已禁用 SQL 服务器的公共访问 I have an Azure function running o
  • Azure NodeJS 控制台日志

    我有 Visual Studio Enterprise MSDN 订阅 因此我决定从 Heroku 迁移到 Microsoft Azure 因为我曾经付费 现在不用了 我的服务计划是 D1 我希望能够跟踪部署在 Azure 平台上的 Nod
  • 单个存储库的 Azure DevOps 权限

    假设我在 ADO 上创建了一个新项目 MyProject 其中 我有 2 个存储库 MyRepo1 和 MyRepo2 我想邀请其他用户向 MyRepo1 贡献代码 但不希望他们看到 MyRepo2 如何才能做到这一点 我尝试为 MyRep
  • 新门户上的 SQL Azure 防火墙规则

    我们使用 SQL Azure 已经大约一年了 为了直接访问Azure之外的服务器 您需要在SQL Azure中添加防火墙规则 那挺好的 旧门户有办法做到这一点 http blogs msdn com b windowsazure archi
  • 禁用在 Visual Studio 2017 中不起作用的 Azure Functions 属性

    我有带计时器触发器的 Azure 功能 public static void Run TimerTrigger 0 15 Disable True TimerInfo myTimer TraceWriter log 这里的Disable t
  • Powershell get-item VersionInfo.ProductVersion 不正确/与 WMI 不同

    我试图理解为什么 Powershell 会返回 DLL 文件的版本号 而不是 Windows 资源管理器中的文件属性页和 WMI 查询显示的版本号 如果这不符合编码问题的正确条件 我提前表示歉意 场景 运行以下 powershell 命令
  • Azure 服务总线订阅者死信

    我到处寻找这方面的信息 但似乎找不到我要找的东西 我有一个天蓝色的主题 只有一个订阅 订阅的处理程序失败了一些消息 它们已被放入死信队列中 我可以访问这些消息 但我不知道如何恢复它们 我不想创建消息的副本并将其发送到主题 我特别想将其移动到
  • Copy-Item 将目录及其内容复制到 UNC 路径

    我正在尝试使用 PowerShell 1 0 获取文件夹的内容并将其复制到另一个文件夹 非常简单的东西 使用起来一切都很好Copy Item from to recurse如果我从本地文件夹复制到本地文件夹 然而 如果 to变量是一个UNC
  • 基于团体成员资格的额外输出

    我希望你们都度过愉快的一天 如果这是一个糟糕的问题尝试 我提前道歉 我不太擅长这个 介绍 首先 我想介绍一下我实际正在创作的内容 我为 MSP 工作 我的任务是创建一个供我们的一位客户使用的用户管理 Powershell 脚本 以便我们可以
  • AuthenticationContext 不包含 AcquireToken 定义?

    我尝试使用 Microsoft Power BI REST API 但没有取得多大进展 因为我对该 API 的经验不是很丰富 据我了解 身份验证上下文是身份模型活动目录的一部分 我三次检查它是否被引用到项目 其余方法运行属性 但没有名为 A
  • Powershell:对 Select-Object 中的字段使用变量

    我正在构建一个正在创建的脚本csv文件 每个csv有一组不同的字段 一切都很好 但我想控制列顺序输出 我有一个变量 其中包含字段以及我想要的字段顺序 我知道我可以使用 Select Object 来控制它 我想做的是这样的 Fields I
  • 调试测试时从 local.setting.json 读取值

    在运行或调试测试时 我似乎无法从天蓝色函数中的该文件中读取任何内容 但是在本地调试整个应用程序时它工作得很好 任何人都可以解释为什么吗 IsEncrypted false Values xyz 123 var res Configurati
  • 使用 powershell 执行 .sql 文件并将输出存储在文本文件中

    我正在尝试从 powershell 运行 sql 脚本 sql 文件并将结果保存到 sql 文件中 概述 SQL 数据库恢复需要用户和权限备份预恢复 一旦恢复完成 我们需要在数据库上执行输出 我们预恢复的用户权限备份 这是我的脚本 当我执行
  • 如何使用 7zip powershell 包含文件和文件夹

    我试图让我的 powershell 脚本压缩一些文件和文件夹 目前 我可以使我的脚本要么压缩所有文件 不包含文件夹 要么压缩包含文件夹但到错误路径的所有文件 一个例子是 如果我有一个名为 wordpress 的文件夹 其中包含文件和一些子文
  • 将文件夹中所有文本文件中与模式匹配的行提取到单个输出文件

    我试图提取文件夹中所有文件中以 开头的每一行 然后将这些行复制到单独的文本文件中 目前在 PowerShell 代码中使用此代码 但我没有得到任何结果 files Get ChildItem folder Filter txt foreac
  • Powershell命令Publish-AzWebApp未发布应用程序

    我有一个 Net 6 Web API 应用程序 我可以通过 Visual Studio 2022 将其发布到 Azure 应用程序服务 然后使用该应用程序 现在我想自动化它 我的 powershell 创建了一个 zip 文件 其中包含所有
  • Azure 应用服务自定义身份验证获取 System.ArgumentNullException:“值不能为空”“参数名称:提供程序”

    我有一个简单的 dot net 移动应用程序 具有自定义身份验证 如下所示 https learn microsoft com en us azure app service mobile app service mobile dotnet
  • 为什么参数名称不能以数字开头?

    变量名可以是数字字母 为什么参数名不能也这样 因为first parameter char of the command parameter中指定的语法Powershell语言规范 http www microsoft com en us
  • 我怎么知道PowerShell函数参数被省略了

    考虑这样的函数 function Test foo bar 我们可以称之为 Test foo null Test 我如何知道何时省略了 foo 以及何时为 null 如果您使用的是 Powershell V2 或更高版本 则可以使用 PSB
  • 内存使用情况、CPU 时间、数据输出和文件系统存储如何应用于我的网站?

    请原谅我的无知 但我有几个问题 我似乎无法通过搜索或谷歌得到答案 这些问题看起来完全愚蠢 但老实说我需要帮助 在我的 Azure 网站门户上 我有一些我很好奇的东西 CPU Time 如何应用于我的网站 我不知道我是如何使用 CPU 的 除

随机推荐