在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。我需要给予它使用OPENROWSET的访问权限
GRANT REFERENCES ON DATABASE SCOPED CREDENTIAL:: WorkspaceIdentity TO JustADTest
型
现在,它可以运行我给它访问- * 的视图以及整个数据库 * 上的OPENROWSET,与基于SQLServer的登录启动方式相同。
那么如何做到这一点呢?看起来SQLServer登录是完全禁止使用的,人们需要找到一种方法来给予基于AD的登录使用OPENROWSET,但我不确定。
2条答案
按热度按时间8oomwypt1#
在某些Synapse无服务器视图上授予登录SELECT,但不能在 * 整个 * Datalake上运行OPENROWSET
下面的命令允许用户使用scoped credential,而不是
OPENROWSET
。字符串
要使用
OPENROWSET
,数据库用户必须具有ADMINISTER BULK OPERATIONS
权限。型
根据MS DOC,
DATA_SOURCE
的OPENROWSET
中,身份验证机制在分配给引用数据源的数据库范围内的凭证中定义。如果DATA_SOURCE
引用非公共的Azure存储,则需要创建数据库范围的凭据并在DATA SOURCE
中引用它以允许访问存储文件。请确保根据您的要求创建数据源,其中文件不应从该数据源获取。
型
上述数据源将只给予访问文件夹% 1的文件。
要限制用户选择所有视图,您可以向用户授予特定视图的权限。如果用户没有对特定视图的选择权限,他将无法在视图中使用SELECT。
型
tkqqtvp12#
可能有多种方法可以做到这一点,但这是我们最终解决的方式:
根据本文:
https://www.serverlesssql.com/user-permissions-in-serverless-sql-pools-external-tables-vs-views/#Conclusion
字符串
第一个-需要授予安全组,这样-在它选择一个对象时,它也可以读取底层数据-这是在数据湖中。
第二个-则确保安全组不能对所有内容运行OPENROWSET本身。注意:第二个,需要从master运行。使用Master;也不起作用-必须从SSMS的左上角下拉列表中选择主。
关键点- * 在Synapse Serverless中-这只适用于外部表,而不是视图 *。如果尝试第二个DENY语句,用户也将无法选择视图。因此,需要使用外部表来代替,它仍然可用。
上面的链接更详细。
我们几乎解决所有这些问题的另一种方法是-从外部数据源中删除凭据,然后进入数据湖本身并在那里删除/添加权限。这与我们设置的其他一些东西不兼容。