Estou acostumado a trabalhar em ambientes muito seguros e, por isso, projeto minhas permissões com um grau muito fino de granularidade. Uma coisa que eu normalmente faço é explicitamente DENY
usuários a capacidade de UPDATE
colunas que nunca devem ser atualizadas.
Por exemplo:
create table dbo.something (
created_by varchar(50) not null,
created_on datetimeoffset not null
);
Essas duas colunas nunca devem ser alteradas depois que o valor for definido. Portanto, eu explicitamente DENY
a UPDATE
permissão sobre eles.
Recentemente, durante uma reunião de equipe, um desenvolvedor levantou a questão de que a lógica para garantir que os campos nunca sejam atualizados deve estar contida na camada de aplicativo e não na camada de banco de dados, caso "eles precisem atualizar os valores por algum motivo". Para mim, isso soa como a mentalidade típica de um desenvolvedor (eu sei, eu costumava ser um!)
Sou o arquiteto sênior da minha empresa e sempre trabalhei com o princípio da menor quantidade de privilégios necessários para que o aplicativo funcionasse. Todas as permissões são auditadas regularmente.
Qual é a melhor prática neste cenário?