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

SQL Server 2022中使用Azurite作为外部数据源遇读取错误

解决SQL Server 2022连接Azurite时OPENROWSET报错问题

针对你遇到的在Windows本地SQL Server 2022中使用Azurite作为外部数据源,调用OPENROWSET时提示“无法打开文件'test-file.csv',因为它不存在或正被其他进程使用”的问题,以下是几个可行的解决方向:

1. 为SQL Server服务账户信任Azurite的HTTPS证书

Azurite使用dotnet dev-cert生成的HTTPS证书时,SQL Server运行的系统账户(默认是NT SERVICE\MSSQLSERVER)可能未信任该证书,导致HTTPS连接失败,错误被伪装成文件不存在。

操作步骤:

  • 打开certmgr.msc,定位到个人 > 证书,找到标记为localhost的ASP.NET Core开发证书,右键选择“所有任务 > 导出”,按向导导出为.cer格式的证书文件(无需导出私钥)。
  • 以管理员身份打开命令提示符,执行以下命令切换到SQL Server服务账户的上下文并导入证书:
    runas /user:NT SERVICE\MSSQLSERVER cmd.exe
    
    在弹出的新命令窗口中,运行:
    certutil -addstore Root "C:\path\to\your\localhost.cer"
    
  • 重启SQL Server服务,然后重新尝试执行OPENROWSET语句。

2. 添加Azurite的数据库范围凭据

即使容器设置为公开访问,SQL Server对Azurite的访问可能仍需要验证。可以添加Azurite默认的账户凭据来解决:

首先创建数据库范围凭据:

CREATE DATABASE SCOPED CREDENTIAL AzuriteCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = 'Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw=='

然后重新创建外部数据源并关联凭据:

CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
    LOCATION = 'abs://localhost:10000/devstoreaccount1/test',
    CREDENTIAL = AzuriteCredential
);

之后再执行OPENROWSET查询尝试读取文件。

3. 验证文件路径的准确性

虽然浏览器能访问文件,但仍需确认:

  • OPENROWSET中指定的文件名test-file.csv与Azurite容器中的文件名完全一致(包括大小写,部分情况下Windows环境也可能出现大小写敏感问题)。
  • 外部数据源的LOCATION路径是否正确:确保devstoreaccount1是Azurite的默认存储账户名,test是容器名,没有多余的斜杠或拼写错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 03:33:20