No Db2 v11.5 no Linux, tenho vários bancos de dados com centenas de tabelas no esquema MYSCHEMA.
EXIGÊNCIA
a) Preciso atribuir permissão SELECT a todas as tabelas no esquema MYSCHEMA, exceto para uma tabela específica MYSCHEMA.NO_ACCESS à qual os usuários não devem ter acesso.
b) Se uma nova tabela for criada no esquema MYSCHEMA, preciso adicionar manualmente GRANT SELECT na nova tabela. Gostaria de evitar qualquer tipo de administração de segurança quando uma nova tabela for criada.
c) Quando temos auditoria de uma empresa de auditoria, precisa ser simples fornecer informações sobre qual acesso algum usuário tem e qual não tem. Ter centenas de concessões é difícil de mostrar que os usuários realmente têm apenas o acesso de que precisam.
SOLUÇÃO ATUAL
Atualmente, concedemos seleção em todas as tabelas, exceto na tabela MYCHEMA.NO_ACCESS, assim:
GRANT SELECT ON TABLE MYSCHEMA.TAB1 TO GROUP GROUP1
GRANT SELECT ON TABLE MYSCHEMA.TAB2 TO GROUP GROUP1
...
GRANT SELECT ON TABLE MYSCHEMA.TAB5000 TO GROUP GROUP1
(make sure there is no MYSCHEMA.NO_ACCESS on grant list)
A abordagem acima tem limitações: sempre que uma nova tabela é criada no esquema MYSCHEMA, preciso definir GRANT SELECT na nova tabela.
Além disso, na auditoria, devido às inúmeras permissões, é difícil provar que os usuários realmente têm apenas as permissões que deveriam ter.
NOVA ABORDAGEM, SE POSSÍVEL
O Db2 v11.5 tem o privilégio GRANT SELECTIN no esquema.
Existe algo parecido como:
GRANT SELECTIN ON SCHEMA MYSCHEMA TO GROUP GRUP1
DENY SELECT ON TABLE MYSCHEMA.NO_ACCESS TO GROUP GROUP1
Onde negar tem maior importância que conceder.
Ou existe alguma outra abordagem?