sql-server - 突触外部表 "Unauthorized"

标签 sql-server azure azure-active-directory azure-synapse azure-data-lake-gen2

我已根据 ADLS Gen2 容器中存储的 parquet 文件在 Azure Synapse 中创建了一个外部表。我使用以下三个查询来创建数据源、文件格式和表:

CREATE EXTERNAL DATA SOURCE demo_external_datasource
WITH
(   LOCATION = 'https://<Storage account>.dfs.core.windows.net/<container>' 
     
)

CREATE EXTERNAL FILE FORMAT demo_parquet_file_format
WITH 
(
   FORMAT_TYPE = PARQUET
)
        
CREATE EXTERNAL TABLE <DATABASE>.<SCHEMA>.<TABLE NAME>
(
    [infa_operation_time] nvarchar(4000),
    [channel_key] bigint,
    [channel_name] nvarchar(4000)

)
WITH (
    LOCATION = '/<FOLDER>/',
    DATA_SOURCE = demo_external_datasource,
    FILE_FORMAT = demo_parquet_file_format

)

如果我将 Web 客户端 (Synapse studio) 与数据库管理员用户一起使用,我可以查询表并获取结果,但是当我尝试通过 SQL Server Management Studio 进行相同的连接时,它会抛出以下错误:

Not able to validate external location because The remote server returned an error: (401) Unauthorized.

我尝试连接数据库管理员和我的 Azure Active Directory 用户(Synapse 工作区和 ADLS 存储帐户的所有者),得到相同的结果。

谢谢。

最佳答案

我相信您需要创建一个 Database Scoped Credential到您的 ADLS 帐户:

CREATE DATABASE SCOPED CREDENTIAL AdlsCredentials
WITH IDENTITY = 'SHARED ACCESS SIGNATURE' ,
  SECRET = '{yourSecret}'

然后在您的外部数据源声明中引用该内容:

CREATE EXTERNAL DATA SOURCE {yourEDSname}
WITH 
  ( 
    LOCATION = 'https://{youradls}.blob.core.windows.net/{yourpath}/' , 
    CREDENTIAL = AdlsCredentials
  ) ;

关于sql-server - 突触外部表 "Unauthorized",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71617320/

相关文章:

Azure 云域 Controller 通过 Azure Connect 为移动桌面提供服务?

python - Microsoft MSAL 是否提供资源所有者密码凭据授予授权支持?

SQL Server (TSQL) - 是否可以并行执行语句?

c# - MSSQL delete code in visual studio with c# is running,但是当我重新启动时,它会恢复到原来的状态

azure - 无法连接到 Azure Pipelines 中的 docker

azure - Azure Function 与 .Net 5 中的并发(隔离)

c# - 使用提供程序 'RsaProtectedConfigurationProvider' 解密失败

.net - RDL 2008 架构和 RDL 2010 架构有什么区别?功能明智

azure - 如何提供从公共(public)互联网到 Azure 私有(private) kubernetes 集群中托管的应用程序的入站访问

azure - 通过 Azure 门户使用 AD 组限制对 AD 应用程序的访问