将文件从 Azure Blob 存储加载到 Azure SQL DB:错误代码 86 指定的网络密码不正确
Posted
技术标签:
【中文标题】将文件从 Azure Blob 存储加载到 Azure SQL DB:错误代码 86 指定的网络密码不正确【英文标题】:Loading file from Azure Blob storage into Azure SQL DB: error code 86 The specified network password is not correct 【发布时间】:2020-01-25 03:01:42 【问题描述】:我一直在尝试运行以下脚本以从 azure blob 存储中读取文件。
--------------------------------------------
--CREATING CREDENTIAL
-- --------------------------------------------
--------------------------------------------
--shared access signature
-- --------------------------------------------
CREATE DATABASE SCOPED CREDENTIAL dlcred
with identity='SHARED ACCESS SIGNATURE',
SECRET = 'sv=2018-03-28&ss=bfqt&srt=sco&sp=rwdlacup&se=2019-12-01T07:28:58Z&st=2019-08-31T23:28:58Z&spr=https,http&sig=<signature from storage account>';
--------------------------------------------
--CREATING SOURCE
--------------------------------------------
CREATE EXTERNAL DATA SOURCE datalake
WITH (
TYPE = BLOB_STORAGE,
LOCATION='https://<storageaccount>.blob.core.windows.net/<blob>',
CREDENTIAL = dlcred
);
最初,该脚本运行良好,但后来在运行下面的最后一个查询时开始出现以下错误 - 无法批量加载,因为无法打开文件“test.txt”。操作系统错误代码86(指定的网络密码不正确。)
--TEST
--------------------------------------------
SELECT CAST(BulkColumn AS XML)
FROM OPENROWSET
(
BULK 'test.xml',
DATA_SOURCE = 'datalake',
SINGLE_BLOB
) as xml_import
如果我使用服务主体或访问密钥创建凭据,则会发生同样的错误。 从字面上尝试了所有内容并使用 Azure 支持记录了票证,但是他们正在努力复制此错误。
我觉得这是存储帐户和 SQL 服务器之外的问题 - Azure 有一大堆可以根据订阅激活/停用的服务,我觉得这是阻止我们成功映射存储帐户。
有人遇到过这个错误吗?如果是这样,您是如何解决的?
【问题讨论】:
是否要将文件从 Azure 数据湖存储加载到 Azure SQL? 你找到解决方案了吗 我现在正在解决同样的问题,我会告诉你我发现了什么 【参考方案1】:我能够通过 Microsoft 支持解决此问题。在此处的 F 部分中,我授予 Storage Blob Data Contributor 对 SQL Server 实例的托管标识的访问权限,然后使用此处的托管标识部分运行 SQL 语句:https://docs.microsoft.com/en-us/sql/t-sql/statements/bulk-insert-transact-sql?view=sql-server-ver15#f-importing-data-from-a-file-in-azure-blob-storage。
保留以下代码解决方案:
CREATE DATABASE SCOPED CREDENTIAL msi_cred WITH IDENTITY = 'Managed Identity';
GO
CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH ( TYPE = BLOB_STORAGE,
LOCATION = 'https://****************.blob.core.windows.net/curriculum'
, CREDENTIAL= msi_cred );
BULK INSERT Sales.Invoices
FROM 'inv-2017-12-08.csv'
WITH (DATA_SOURCE = 'MyAzureBlobStorage');
为此,SQL Server 实例需要为其分配托管标识。这可以在创建时使用--assign-identity
标志完成。
【讨论】:
是的,托管身份是关键。对于某些人来说,VNET 服务端点的概念可能不清楚,所以我在此处记录了详细说明 - medium.com/@isinghrana/…以上是关于将文件从 Azure Blob 存储加载到 Azure SQL DB:错误代码 86 指定的网络密码不正确的主要内容,如果未能解决你的问题,请参考以下文章
将文件从 Azure Blob 存储加载到 Azure SQL DB:错误代码 86 指定的网络密码不正确
如何使用数据工厂将数据从 Azure Blob 存储增量加载到 Azure SQL 数据库?
使用 Azure 数据工厂从 blob 存储中仅读取一个文件并加载到数据库中
使用 Nodejs 将文件从 Azure 存储 blob(容器)复制到 Azure 文件共享