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

将Azure专用SQL池连接至Azure App Service(.NET Core)的步骤及疑问

Azure专用SQL池与.NET Core 8 App Service连接步骤(ADO.NET)

是否需要添加App Service托管标识?

是的,强烈推荐使用托管标识连接SQL池,这是Azure环境下的安全最佳实践,能避免硬编码凭据,无需手动管理密码。你可以选择系统分配或用户分配的托管标识,两者都需要添加到SQL池的数据库用户中。

具体启用步骤

1. 为App Service启用托管标识

  • 系统分配标识:
    登录Azure门户,进入你的App Service → 左侧菜单选「身份」→ 切换到「系统分配」标签 → 将「状态」设为「开启」→ 点击「保存」。
  • 用户分配标识:
    先在Azure中创建用户分配托管标识,然后回到App Service的「身份」→「用户分配」标签 → 点击「添加」,选择你创建的标识并保存。

2. 给托管标识分配SQL池数据库权限

登录到你的Azure专用SQL池(可通过SSMS、Azure门户的查询编辑器或Azure Data Studio),执行以下SQL命令:

-- 针对系统分配标识:用你的App Service名称作为用户名
CREATE USER [你的App Service名称] FROM EXTERNAL PROVIDER;

-- 针对用户分配标识:用你的托管标识名称作为用户名
CREATE USER [你的用户分配标识名称] FROM EXTERNAL PROVIDER;

-- 授予数据读取权限(根据需求调整,比如添加db_datawriter用于写入)
ALTER ROLE db_datareader ADD MEMBER [上面创建的用户名];

3. 配置连接字符串

在App Service的「配置」→「连接字符串」中添加一条连接信息,名称可自定义(比如SqlPoolConn),值根据标识类型填写:

  • 系统分配标识:
    Server=tcp:<SQL池服务器名>.database.windows.net,1433;Database=<数据库名>;Authentication=Active Directory Managed Identity;
    
  • 用户分配标识:需要额外指定标识的客户端ID
    Server=tcp:<SQL池服务器名>.database.windows.net,1433;Database=<数据库名>;Authentication=Active Directory Managed Identity;User Id=<用户分配标识的客户端ID>;
    

4. .NET Core 8代码实现(SqlConnection + SqlCommand)

通过依赖注入获取配置,然后使用ADO.NET连接数据库:

using System.Data.SqlClient;
using Microsoft.Extensions.Configuration;

public class SqlPoolDataAccessor
{
    private readonly string _connString;

    // 通过构造函数注入IConfiguration
    public SqlPoolDataAccessor(IConfiguration config)
    {
        _connString = config.GetConnectionString("SqlPoolConn");
    }

    public async Task<IEnumerable<string>> FetchSampleData()
    {
        var dataList = new List<string>();
        using var connection = new SqlConnection(_connString);
        await connection.OpenAsync();

        var query = "SELECT TOP 5 [YourColumnName] FROM [YourTableName]";
        using var command = new SqlCommand(query, connection);
        using var reader = await command.ExecuteReaderAsync();

        while (await reader.ReadAsync())
        {
            dataList.Add(reader.GetString(0));
        }

        return dataList;
    }
}

5. 验证网络访问权限

确保SQL池的防火墙允许App Service访问:

  • 进入SQL池对应的逻辑服务器 →「防火墙和虚拟网络」→ 勾选「允许Azure服务和资源访问此服务器」;
  • 或者如果需要更严格的控制,添加App Service的出站IP地址到防火墙规则中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:01:25