Para a função db_denycustomer, desejo que apenas o código da coluna da tabela customer seja SELECTable e nenhum dos outros. Então eu fiz isso:
DENY SELECT ON dbo.customer TO db_denycustomer
GRANT SELECT ON dbo.customer (code) TO db_denycustomer
... e funciona bem. Legal! Mas porque ?
O que li em artigos relacionados é que as permissões são empilhadas, mas DENYtêm precedência. Por outro lado, no meu caso, parece que a última permissão "query" teve precedência. Com certeza, se eu executá-los na ordem inversa, o último também DENYoculta a coluna de código.
Você poderia, por favor, elaborar isso?
Também incluí o padrão db_datawritere as db_datareaderfunções do usuário com o qual testei.