azure - 在某些 Synapse Serverless View 上授予登录 SELECT 权限,但无法在*整个* Datalake 上运行 OPENROWSET

标签 azure azure-synapse openrowset

对于 Synapse Serverless 中基于 SQL Server 的登录,一旦我运行这两项操作:

use master
GO
Create Login JustTest WITH PASSWORD='Whatever'

use somedatabase
Create User JustTest from login JustTest

现在,JustTest 可以在 Datalake 上运行任何 OPENROWSET 查询。哎呀!

对于 Synapse Serverless 中的基于 Azure AD 安全组的登录:

use master
GO
Create login JustADTest FROM EXTERNAL PROVIDER

use somedatabase
Create user JustADTEST from LOGIN JustADTEST

最初,即使我执行 GRANT SELECT ON,它也无法运行任何 View 。我需要授予它使用 OPENROWSET 的权限

GRANT REFERENCES ON DATABASE SCOPED CREDENTIAL:: WorkspaceIdentity TO JustADTest

现在它可以运行我授予它访问权限的 View - 以及整个数据湖上的 OPENROWSET,与基于 SQLServer 的登录启动方式相同。

那么如何做到这一点呢?看起来 SQLServer 登录完全不受限制,需要找到一种方法来为基于 AD 的登录提供有限的 OPENROWSET 使用,但我不确定。

最佳答案

Grant a login SELECT on some Synapse Serverless Views, but not ability to run OPENROWSET on entire Datalake

以下命令向用户授予使用范围凭证的权限,而不是 OPENROWSET .

GRANT REFERENCES ON DATABASE SCOPED CREDENTIAL:: WorkspaceIdentity TO JustADTest

要使用OPENROWSET数据库用户必须有ADMINISTER BULK OPERATIONS许可。

GRANT ADMINISTER DATABASE BULK OPERATIONS TO <User>;

AS per MS DOC,

  • In OPENROWSET with DATA_SOURCE authentication mechanism is defined in database scoped credential assigned to the referenced data source. If DATA_SOURCE references Azure storage that isn't public, you would need to create database-scoped credential and reference it in DATA SOURCE to allow access to storage files.

确保根据您的要求创建数据源,不应从该数据源获取文件。

# Create Scoped credential
CREATE DATABASE SCOPED CREDENTIAL mcred
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = 'SAS Access Token';

# Create external data source
CREATE EXTERNAL DATA SOURCE sampledataset
WITH 
(
    TYPE = BLOB_STORAGE,
    LOCATION = 'https://Storageaccount.blob.core.windows.net/folder1/',
    CREDENTIAL = mcred
); 

上述数据源仅允许访问文件夹 1 文件。

要限制用户选择所有 View ,您可以向用户授予特定 View 的权限。如果用户没有特定 View 的 select 权限,他将无法在 View 中使用 SELECT。

GRANT SELECT ON View1 TO <user>;

关于azure - 在某些 Synapse Serverless View 上授予登录 SELECT 权限,但无法在*整个* Datalake 上运行 OPENROWSET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76783894/

相关文章:

azure - 我们可以从管道 azure synapse 在无服务器池中执行 sql 查询吗?

Azure SQL 数据仓库代理键

c# - IIS应用程序池回收触发器: Not enough storage is available to complete this operation (Azure App Service)

ASP.NET 通用提供程序 + Azure CSCFG

sql-server - Azure导入数据SQL

azure - 数据流表达式生成器最大最大整数 ADF

使用 Openrowset 从 Excel 2016 中提取数据的 SQL 查询 - 出现语法错误

Azure Synapse SQL 池未使用 OPENROWSET 识别 csv header

sql-server-2005 - 无法初始化链接服务器“(null)”的OLE DB提供程序“MSDASQL”的数据源对象

python - 如何在 Python 中以编程方式从 Azure 存储帐户检索连接字符串