对于 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,
block 引用>
- In
OPENROWSET
withDATA_SOURCE
authentication mechanism is defined in database scoped credential assigned to the referenced data source. IfDATA_SOURCE
references Azure storage that isn't public, you would need to create database-scoped credential and reference it inDATA 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/