我在使用MSI时出现错误,该错误已在文件夹级别授予MSI访问权限。
信息105019,第16级,第1行,第45行 外部文件访问由于内部错误而失败:“访问HDFS时发生错误:调用HdfsBridge_Connect时引发Java异常。 Java异常消息: 头https://polybasetestsa.dfs.core.windows.net/produced?resource=filesystem&timeout=90 状态码= 403 StatusDescription =此请求无权使用此权限执行此操作。 ErrorCode = ErrorMessage ='
我正在使用MSI在带有数据湖Gen2的Azure SQL数据仓库中探索Polybase方法,其中已使用存储资源管理器在文件夹级别对MSI对象id(azure sql服务器仓库服务标识)进行了文件夹访问。
根据给定的代码示例,已访问MSI的“ data”文件夹。
*注意:如果我在IAM中的容器/文件系统/存储帐户级别授予MSI的角色基础访问权限(存储Blob数据读取器),则此方法工作正常。 这也可以使用服务主体与Gen 1 datalake一起使用。
CREATE DATABASE SCOPED CREDENTIAL [ADLS_Gen2_DatabaseScopedCredential]
WITH
IDENTITY = 'Managed Service Identity'
;
GO
IF EXISTS ( SELECT * FROM sys.external_file_formats WHERE name = 'EXT_CsvFileFormatSnappy' )
DROP EXTERNAL FILE FORMAT [EXT_CsvFileFormatSnappy];
GO
CREATE EXTERNAL FILE FORMAT [EXT_CsvFileFormatSnappy]
WITH (
FORMAT_TYPE = DELIMITEDTEXT,
FORMAT_OPTIONS (
FIELD_TERMINATOR = ','
,USE_TYPE_DEFAULT = TRUE ),
DATA_COMPRESSION = 'org.apache.hadoop.io.compress.DefaultCodec'
)
GO
CREATE EXTERNAL DATA SOURCE [ADLS_Gen2_External_DataSource]
WITH (
TYPE = HADOOP,
LOCATION = N'abfss://produced@polybasetestsa.dfs.core.windows.net/',
CREDENTIAL = ADLS_Gen2_DatabaseScopedCredential)
Go
CREATE EXTERNAL TABLE [TB_EXT_CSV_DATA]
(
First [nvarchar](2000) NULL,
Last [nvarchar](2000) NULL
)
WITH (DATA_SOURCE = [ADLS_Gen2_External_DataSource],
LOCATION = N'/data',
FILE_FORMAT = [EXT_CsvFileFormatSnappy],REJECT_TYPE = VALUE,REJECT_VALUE = 0);
Go
按照下面的网址,实际上也支持MSI,它与databrick和azure数据工厂都可以正常工作。