【问题标题】:Cannot bulk load because the file "File.csv" could not be opened. Operating system error code 5(Access is denied.)无法批量加载,因为无法打开文件“File.csv”。操作系统错误代码 5(访问被拒绝。)
【发布时间】:2020-02-08 22:02:31
【问题描述】:

我在尝试从 Azure Sql 数据库访问 Azure Blob Store 并上传单个 blob/图像时遇到以下问题。得到上述。我已经配置了 SAS。以下是我的发现:

  • 如果容器是公共的,则下面的 sql 无需凭据即可工作
  • 当它是私有时,可以通过 blob url 访问 blob 从浏览器(使用 sas 令牌)
  • 如果我尝试通过 Azure Sql 数据库(相同的令牌)访问它,我是 得到与上述相同的错误:

“执行查询失败。错误:无法批量加载,因为无法打开文件“POC.png”。操作系统错误代码 5(拒绝访问。)。”

CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = 'sv=2018-03-28....'
go
CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage 
WITH ( TYPE = BLOB_STORAGE, 
LOCATION = 'https://poc.blob.core.windows.net/poc-container',
CREDENTIAL = MyAzureBlobStorageCredential); 
go    
INSERT INTO file111 (col2)
SELECT BulkColumn FROM OPENROWSET(
 BULK  'POC.png',
DATA_SOURCE = 'MyAzureBlobStorage',
 SINGLE_BLOB
) AS DataFile;

【问题讨论】:

  • Azure Sql 数据库很可能没有 POC.png 所在路径所需的权限。
  • 另一方面,正如我上面所写的 - 如果我将 Azure Blob 访问级别设置为公共,那么,完全相同的 SQL(仅删除凭据)可以正常工作。
  • 另一个发现:如果我只为特定的 blob 创建和使用 SAS,那么一切正常。问题是当我在更高的存储帐户级别创建 SAS 时
  • 您是否生成了具有列表和读取权限的 SAS?在您的 SAS 字符串中,您应该看到“&sp=rl”。另请记住,名称区分大小写

标签: azure azure-sql-database blob


【解决方案1】:

我所做的是:

  • 删除了所有不需要的权限,只留下了读取和列表;
  • 确保生成的开始/结束日期时间为几天 过去/足够远的未来;
  • 确保 {container}{blobname} 是相同的小写/大写 容器中的字母;
  • LOCATION 末尾没有反斜杠

它奏效了。任何可能导致上述错误消息的要点。

【讨论】:

  • 恭喜!请接受它作为答案。这对其他社区成员可能是有益的。谢谢。
猜你喜欢
  • 2013-01-11
  • 2018-04-18
  • 2021-02-26
  • 2013-10-29
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
相关资源
最近更新 更多