将文件从 Azure Blob 存储加载到 Azure SQL DB 中:错误代码 86 指定的网络密码不正确。

问题描述 投票:1回答:1

我一直在尝试运行下面的脚本来从 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有一大堆可以针对订阅激活deactivated的服务,我觉得是其中之一阻止我们成功映射存储帐户。

有人遇到过这个错误吗?如果有,你是怎么解决的?

azure azure-sql-database azure-storage-blobs
1个回答
0
投票

我在微软的支持下,这个问题得到了解决。在这里的F部分,我授予Storage Blob Data Contributor对SQL Server实例的托管身份的访问权,然后使用这里的托管身份部分运行SQL语句。https:/docs.microsoft.comen-ussqlt-sqlstatementsbulk-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服务器实例需要为其分配一个托管身份。这可以在创建时通过 --assign-identity 旗帜。

© www.soinside.com 2019 - 2024. All rights reserved.