求助:Blob Storage设为选定虚拟网络启用时Azure SQL Server扩展事件失效
问题:Azure SQL扩展事件在Blob Storage限制网络访问时无法运行
我有一个Azure SQL数据库,测试扩展事件(Extended Events)时,当Blob Storage的公共网络访问设为「从所有网络启用」,扩展事件可以正常工作;但将其改为「从选定虚拟网络和IP地址启用」,同时勾选「Microsoft网络路由」,并设置资源类型为Microsoft.Sql/servers且选择「当前订阅中的全部」后,扩展事件无法正常运行,报错如下:
目标“5B2DA06D-898A-43C8-9309-39BBBE93EBBD.package0.event_file”在初始化期间遇到配置错误。无法将对象添加到事件会话。(null) (Microsoft SQL Server, 错误: 25602)
解决步骤
第一步:为SQL Server分配托管标识
运行PowerShell命令为Azure SQL Server分配Azure AD托管标识:
Set-AzSqlServer -ResourceGroupName [ResourcegroupName] -ServerName [AzureSQLServerName] -AssignIdentity
执行后可在Azure AD的「企业应用」中,切换应用类型为「托管标识」,找到新创建的标识。
第二步:为托管标识授予Blob Storage容器权限
进入目标Blob Storage容器,按以下路径操作:
- 点击「访问控制(IAM)」→「角色分配」
- 点击「添加」→「添加角色分配」
- 选择「存储Blob数据参与者」角色
- 选择「托管标识」→「选择成员」,选中刚创建的标识后点击「选择」
- 最后点击「查看 + 分配」完成权限配置
第三步:在SQL数据库中配置数据库范围凭据
在Azure SQL数据库中执行以下SQL命令,配置使用托管身份连接Blob Storage:
CREATE DATABASE SCOPED CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>] WITH IDENTITY = 'Managed Identity'; GO
执行SELECT * FROM sys.database_scoped_credentials可查看已创建的凭据。
补充说明
通过SSMS创建Azure SQL扩展事件时,官方文档仅适用于Blob Storage完全开放的场景。实际使用RBAC限制Blob Storage网络访问时,需要通过上述托管标识+RBAC权限的方式配置,而非依赖SAS密钥。
内容的提问来源于stack exchange,提问作者null_pointer
相关产品推荐
相关产品推荐

