【发布时间】: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