找不到凭据“<db_scoped_creds>”,因为它不存在或您没有权限

Cannot find the CREDENTIAL '<db_scoped_creds>', because it does not exist or you do not have permission

我使用此处指定的步骤创建了外部 tables:https://docs.microsoft.com/en-us/azure/synapse-analytics/sql/develop-storage-files-storage-access-control?tabs=shared-access-signature

在 Synapse 工作区内,我能够访问外部 table 数据(因为它使用我的 AD 凭据)。但是,它不适用于外部平台,在本例中为 redash。为了从 redash 访问数据,我创建了一个数据库用户,这是我认为我缺少以某种方式授予该用户访问数据库范围凭据的步骤的地方。

步骤,我创建了具有所需凭据的外部 table:

  1. 创建数据库范围凭据以访问 blob 存储中的数据
CREATE DATABASE SCOPED CREDENTIAL datalake_credentials
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    SECRET = 'SAS TOKEN';
  1. 使用在上一步中创建的凭据创建外部数据源
CREATE EXTERNAL DATA SOURCE datalake_raw_marketing
WITH ( LOCATION = 'https://mydatalake.blob.core.windows.net/raw/marketing'
          , CREDENTIAL= [datalake_credentials]
);
  1. 最终使用数据源
  2. 创建外部table
CREATE EXTERNAL TABLE [dbo].[Customers]
(
    [Id] [varchar](36),
    [FirstName] [varchar](100),
    [Email] [varchar](100),
    [Date] [varchar](100),
    [Group] [varchar](100)
)
WITH (DATA_SOURCE = [datalake_raw_marketing], LOCATION = N'sub_dir/customer_list_*.csv',FILE_FORMAT = [QuotedCsvWithHeaderFormat])
GO

使用此页面上的信息 https://docs.microsoft.com/en-us/azure/synapse-analytics/sql/develop-storage-files-storage-access-control?tabs=shared-access-signature 我尝试“授予使用凭据的权限”使用:

GRANT REFERENCES ON CREDENTIAL::[datalake_credentials] TO [redash];

但它总是导致:

Cannot find the CREDENTIAL 'datalake_credentials', because it does not exist or you do not have permission.

您的凭据是数据库范围内的,因此您需要将其包含在声明中:

GRANT REFERENCES ON DATABASE SCOPED CREDENTIAL::[{credential_name}] TO [{user}];