0

我有;

  1. 一把万能钥匙。
  2. 数据库范围的凭据。
  3. 外部数据源。
  4. 文件格式。
  5. 用户为 Azure SQL Server 创建了托管标识
  6. 我的 ADLS 存储帐户上该托管标识的RBAC参与者权限。

当我执行代码以创建外部表时,会引发此错误

获取提供的数据库和凭据的凭据密钥失败。数据库名称 = DWShellDb,凭据名称 = devtechnicalpractice1_AdlsManagedIdentity,异常 = System.Data.SqlClient.SqlException (0x80131904):无法获取或解密凭据“devtechnicalpractice1_AdlsManagedIdentity”的机密。

这是代码:

CREATE DATABASE SCOPED CREDENTIAL credname
WITH 
    IDENTITY = 'exact_mi_name'
;

CREATE EXTERNAL DATA SOURCE datasourcename
WITH
  ( LOCATION = 'abfss://containername@storageaccountname.dfs.core.windows.net' ,
    CREDENTIAL = credname ,
    TYPE = HADOOP
  ) ;

CREATE EXTERNAL FILE FORMAT Header_CSV1
WITH (FORMAT_TYPE = DELIMITEDTEXT,
      FORMAT_OPTIONS(
          FIELD_TERMINATOR = ',',
          STRING_DELIMITER = '"',
          FIRST_ROW = 1, 
          USE_TYPE_DEFAULT = True)
) ;


CREATE EXTERNAL TABLE [dbo].[tablename]
( [field1] VARCHAR(250) NULL,
  [field2] VARCHAR(250) NULL,
  [field3] VARCHAR(250) NULL )
WITH
(
    LOCATION='/Countries/' ,
    DATA_SOURCE = datasourcename,
    FILE_FORMAT = Header_CSV1 ,
    REJECT_TYPE = VALUE ,
    REJECT_VALUE = 0
) ;

我认为错误不在TSQL 之内,而是安全权限。

4

1 回答 1

1

我有同样的问题。后来我发现我在创建范围凭据时丢失了秘密。它应该是这样的:

CREATE DATABASE SCOPED CREDENTIAL credname
WITH
    IDENTITY = 'exact_mi_name',
    SECRET = 'adfNSkGPaTuryRdqt9sPAnjPW8xEzM7kQIYt' // data lake key
;
于 2020-07-02T09:34:39.217 回答