在 Azure Synapse 中,如何设置可以访问 Datalake 存储的 SQL 服务器?

In Azure Synapse, how do I setup a SQL Server that can access Datalake Storage?

我已经设置了一个 Synapse 环境,并在我的存储帐户中填充了一些示例 Parquet 文件。然后我创建了一个无服务器 SQL 数据库并在 Parquet 文件上创建了一些外部表。所有这些工作正常,我可以使用 AD 身份验证从 Synapse UI 和 SSMS 查询这些表。

问题是我想将应用程序连接到不支持 AD 身份验证的无服务器 SQL 数据库。因此我想使用标准 SQL 帐户连接它。我已经设置了一个 SQL 帐户(用户名和密码),我可以通过 SSMS 连接,但由于这个错误无法查询任何表...

External table 'TableName' is not accessible because content of directory cannot be listed.

我认为这是一个双跃点身份验证问题,因为 SQL 用户无权访问存储帐户?我似乎找不到有关如何执行此操作的任何指南。有人知道吗?

我写了一篇 blog-post 来解决这个问题,因为几天前我也遇到过这个问题。你可以阅读here.

基本上,归结为您必须:

  • 为您的用户创建 SQL 登录名
  • 在 SQL 中创建一个与 URL 同名的凭据,指向数据湖中包含您要查询的文件的容器
  • 向您的 SQL 登录名
  • 授予对该凭据的引用权限
  • 在您的数据库中为该登录名创建一个用户

除此之外,您还需要创建一些特定的 role-assignments。