Em um pool SQL dedicado do Azure Synapse, tenho a seguinte configuração:
-- 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];
Se eu fizer login, sendo membro do radish
grupo AAD, não consigo criar uma tabela em myschema
:
CREATE TABLE [myschema].[test] (id int);
Msg 6004, Level 14, State 9, Line 1
User does not have permission to perform this action.
Depois de obter a função de administrador do Synapse, isso funciona. (Quando um membro, SESSION_USER
é dbo
.) Isso não é surpresa, pois essa função pode fazer basicamente tudo dentro dos pools SQL de um determinado espaço de trabalho.
No entanto, quando eu me removo da função de administrador do Synapse, acontece o seguinte:
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.
Provavelmente meu entendimento sobre como os privilégios necessários CREATE TABLE
e DROP TABLE
se relacionam entre si está totalmente errado, mas até agora eu achava que eram os mesmos privilégios necessários para ambos. Alguém pode me mostrar onde meu pensamento está errado?
Até agora vejo as seguintes possibilidades:
- a
owner
função não se aplica a usuários que são apenas indiretamente membros dela (ou seja, por meio de associação ao grupo AAD) - isso parece contradizer https://learn.microsoft.com/en-us/azure/synapse-analytics/security /how-to-set-up-access-control#step-8-add-users-to-security-groups - a tabela criada ao ter privilégios suficientes é de minha propriedade e não a função de proprietário do esquema. A seção 'Cuidado' contradiz: 'Um usuário com permissão ALTER em um esquema pode criar procedimentos, sinônimos e visualizações que pertencem ao proprietário do esquema.' Além disso,
sp_tables
relatóriosowner
como sendotable_owner
.
Além disso, curiosamente, posso fazer um GRANT ALTER, CONTROL on SCHEMA::[myschema] TO [owner];
com sucesso, enquanto a criação da tabela falha.