在 Azure Synapse 专用 SQL 池中,我有以下设置:
-- a custom DB role to manage privileges
CREATE ROLE [owner];
-- there is a schema owned by this role
CREATE SCHEMA [myschema] AUTHORIZATION [owner];
-- an Azure AD group to allow its members to log in
CREATE USER [radish] FROM EXTERNAL PROVIDER;
-- the AAD group is a member of the owner role
EXEC sp_addrolemember 'owner', 'radish';
-- privileges are assigned exclusively through custom DB roles
GRANT ALTER, CONTROL on SCHEMA::[myschema] TO [owner];
如果我作为 AAD 组的成员登录,radish
则无法在以下位置创建表myschema
:
CREATE TABLE [myschema].[test] (id int);
Msg 6004, Level 14, State 9, Line 1
User does not have permission to perform this action.
一旦我获得 Synapse 管理员角色,就可以了。(当一个成员时,SESSION_USER
是dbo
。)这并不奇怪,因为这个角色基本上可以做给定工作区的 SQL 池中的所有事情。
但是,当我从 Synapse 管理员角色中删除自己时,会发生以下情况:
DROP TABLE [myschema].[test];
-- completes successfully, but then:
CREATE TABLE [myschema].[test] (id int);
Msg 6004, Level 14, State 9, Line 1
User does not have permission to perform this action.
可能我对彼此之间的必要特权CREATE TABLE
和DROP TABLE
相互关联的理解是完全错误的,但直到现在我认为这是两者都需要的相同特权。有人可以告诉我我的想法在哪里错了吗?
到目前为止,我看到了以下可能性:
- 该
owner
角色不适用于仅间接成为其成员的用户(即通过 AAD 组的成员身份) - 这似乎与https://learn.microsoft.com/en-us/azure/synapse-analytics/security相矛盾/how-to-set-up-access-control#step-8-add-users-to-security-groups - 拥有足够权限时创建的表由我自己拥有,而不是架构所有者角色。“警告”部分与以下内容相矛盾:“对架构具有 ALTER 权限的用户可以创建架构所有者拥有的过程、同义词和视图。” 此外,
sp_tables
报告owner
为table_owner
.
另外,有趣的是,我可以GRANT ALTER, CONTROL on SCHEMA::[myschema] TO [owner];
成功地创建表,而创建表失败。
作为对象的所有者,您可以删除该对象。无论您是否拥有此类对象的 CREATE 权限。
模式所有者暗示 CONTROL 对模式意味着 ALTER 对模式。CREATE TABLE 是数据库级别的权限,[owner] 没有。
从CREATE TABLE 文档: