我需要使用SQL身份验证连接到Synapse Analytics Serverless无SQL池数据库。我创建了一个无服务器的SQL数据库,并创建了一个SQL用户,并提供了db_owner访问。
然后在下面创建一个外部表
IF NOT EXISTS (SELECT * FROM sys.external_file_formats
WHERE name = 'SynapseDeltaFormat')
CREATE EXTERNAL FILE FORMAT [SynapseDeltaFormat]
WITH ( FORMAT_TYPE = PARQUET)
GO
IF NOT EXISTS (SELECT * FROM sys.external_data_sources WHERE name =
'test_dfs_core_windows_net')
CREATE EXTERNAL DATA SOURCE [test_dfs_core_windows_net]
WITH (
LOCATION = 'abfss://test.dfs.core.windows.net'
)
GO
CREATE EXTERNAL TABLE table_staging (
<columns here>
)
WITH (
LOCATION = 'bronze/table_staging/',
DATA_SOURCE = [test_dfs_core_windows_net],
FILE_FORMAT = [SynapseDeltaFormat]
)
GO
SELECT TOP 100 * FROM dbo.table_staging
GO当试图使用SQL外部表“dbo.table_staging”访问表的数据时出错,因为位置不存在或其他进程使用它。
使用AD用户可以访问表数据。使用SQL用户创建DataSource。
似乎Server用户没有访问数据湖/数据存储的权限。如何授予这个权限?
发布于 2022-05-05 20:16:04
刚刚开始的三角洲湖泊:)
默认情况下,无服务器sql使用用户上下文进行身份验证。当您在synapse data中查询时,您正在使用AD用户上下文,这就是您可以连接到外部存储的原因。
但是,对于无法访问查询的SQL用户和AD用户,您需要在设置查询时使用凭据。
您需要有访问存储的方法??服务主体、SAS、托管标识。
我只是使用服务主体"App注册“设置凭据。
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<secret>';
go
CREATE DATABASE SCOPED CREDENTIAL [credentialname] WITH
IDENTITY = '<Client-ID>@https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token'
, SECRET = '<token>'
GO
CREATE EXTERNAL DATA SOURCE mydatasource WITH (
LOCATION = 'https://<storageaccount>.dfs.core.windows.net/onedatahubtest',
CREDENTIAL = credentialname
);
CREATE VIEW MYVIEW AS
SELECT *
FROM OPENROWSET(
BULK 'Example/table',
DATA_SOURCE='mydatasource',
FORMAT = 'delta') as rows;现在,我的sql用户可以访问该视图。
https://stackoverflow.com/questions/71912940
复制相似问题