【发布时间】:2020-11-05 05:25:45
【问题描述】:
我正在尝试将 Azure 文件存储中的文件保存到 Azure SQL 数据库表 varbinary(max) 列(按照建议存储整个内容 in this answer)。我尝试了几次调整我的 SQL 查询,但没有成功。这是导致错误“外部数据源“my_Azure_Files”中指定的位置错误或无法访问的代码。当它调用 OPENROWSET 时:
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'mypassword123'
GO
CREATE DATABASE SCOPED CREDENTIAL [https://mystorageaccount.file.core.windows.net/]
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = 'sas_token_generated_on_azure_portal';
CREATE EXTERNAL DATA SOURCE my_Azure_Files
WITH (
LOCATION = 'https://mystorageaccount.file.core.windows.net/test',
CREDENTIAL = [https://mystorageaccount.file.core.windows.net/],
TYPE = BLOB_STORAGE
);
Insert into dbo.myTable(targetColumn)
Select BulkColumn FROM OPENROWSET(
BULK 'test.csv',
DATA_SOURCE = 'my_Azure_Files',
SINGLE_BLOB) AS testFile;
CLOSE MASTER KEY;
GO
我可以通过网络浏览器使用相同的 SAS 令牌和 url 路径下载 test.csv 文件。我还能够验证凭据和外部源是否已在数据库中成功创建:
+-------------------------------------------------+------------------+-----------------------------------------------------+-------------------------+------------------+---------------------------+---------------+---------------+----------------+--------------------+----------+
| data_source_id | name | location | type_desc | type | resource_manager_location | credential_id | database_name | shard_map_name | connection_options | pushdown |
+-------------------------------------------------+------------------+-----------------------------------------------------+-------------------------+------------------+---------------------------+---------------+---------------+----------------+--------------------+----------+
| 65540 | my_Azure_Files | https://mystorageaccount.file.core.windows.net/test | BLOB_STORAGE | 05/01/1900 00:00 | NULL | 65539 | NULL | NULL | NULL | ON |
| name | principal_id | credential_id | credential_identity | create_date | modify_date | target_type | target_id | | | |
+-------------------------------------------------+------------------+-----------------------------------------------------+-------------------------+------------------+---------------------------+---------------+---------------+----------------+--------------------+----------+
| https://mystorageaccount.file.core.windows.net/ | 1 | 65539 | SHARED ACCESS SIGNATURE | 15/07/2020 13:14 | 15/07/2020 13:14 | NULL | NULL | | | |
在 Azure 门户上创建 SAS 时,我检查了所有允许的资源类型和所有允许的权限,“删除”除外。我还删除了领先的“?”从 SAS 到 SECRET 字段中使用。
我尝试了TYPE = BLOB_STORAGE 和TYPE = HADOOP 以及SINGLE_BLOB、SINGLE_CLOB 和SINGLE_NCLOB 参数的变体。
请帮我解决我的问题。
【问题讨论】:
-
我尝试连接到 Azure blob 容器中的文件,而不是像我最初那样连接到 SMB 文件共享,并且它似乎可以正常工作。因此,虽然这可能是一个很好的解决方案,但我仍然很想知道为什么 SMB 文件共享不适用于 Azure SQL DB。
标签: tsql azure-sql-database azure-blob-storage