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

如何在仅允许Azure Web应用访问的Azure SQL中执行授权查询?

解决方法

方法一:临时添加自己为AD管理员,执行后移除

这是最直接的操作方式,步骤如下:

  • 用Azure CLI更新SQL Server的AD管理员,把你的Azure AD账户加进去:
    az sql server ad-admin create --resource-group MY_GROUP --server-name MY_SERVER --display-name "你的名字" --object-id "你的Azure AD对象ID"
    
    (可以通过az ad user show --id "你的邮箱"获取自己的object-id)
  • 现在你就能用Azure Data Studio或Azure查询编辑器,通过Azure AD身份验证连接数据库,执行需要的授权语句:
    CREATE USER some_user_name FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER some_user_name;
    ALTER ROLE db_datawriter ADD MEMBER some_user_name;
    ALTER ROLE db_ddladmin ADD MEMBER some_user_name;
    
  • 操作完立刻移除自己的管理员权限,恢复到仅Web应用作为管理员的状态:
    az sql server ad-admin delete --resource-group MY_GROUP --server-name MY_SERVER
    

方法二:通过Web应用的托管身份执行SQL语句

不用修改服务器管理员,直接借助Web应用的MSI身份来执行脚本,步骤如下:

  • 在Web应用里加一段临时代码(比如ASP.NET Core、Python脚本都行),用MSI身份连接SQL并执行授权语句。举个C#的示例:
    using System.Data.SqlClient;
    using Azure.Identity;
    
    var sqlConnectionString = "Server=tcp:MY_SERVER.database.windows.net,1433;Database=MY_DATABASE;Authentication=Active Directory Managed Identity;";
    using var connection = new SqlConnection(sqlConnectionString);
    connection.Open();
    
    var sqlCommands = new[]
    {
        "CREATE USER some_user_name FROM EXTERNAL PROVIDER;",
        "ALTER ROLE db_datareader ADD MEMBER some_user_name;",
        "ALTER ROLE db_datawriter ADD MEMBER some_user_name;",
        "ALTER ROLE db_ddladmin ADD MEMBER some_user_name;"
    };
    
    foreach (var cmdText in sqlCommands)
    {
        using var command = new SqlCommand(cmdText, connection);
        command.ExecuteNonQuery();
    }
    
  • 把这段临时代码部署到Web应用,访问对应的触发端点执行脚本。
  • 执行完成后,立刻删除这段临时代码和端点,避免安全风险。

注意事项

  • 方法一要记得及时移除自己的管理员权限,别留下安全隐患。
  • 方法二的临时代码要做好访问限制,比如只允许特定IP访问,用完就删。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:12:10