将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
相关产品推荐
相关产品推荐

