Temos um IBM System i executando o IBM i OS v6r1. Neste sistema, eu criei algumas visualizações de banco de dados. O que eu quero fazer é conceder a um grupo de usuários específico acesso APENAS a essas visualizações e nada mais na biblioteca em que as visualizações residem. Isso é possível? Eu tinha um grupo de usuários que tinha apenas permissões de leitura para todas as tabelas e exibições da biblioteca em que minhas exibições estão localizadas, e o acesso funciona quando o usuário está nesse grupo de usuários. Tentei copiar o grupo de usuários e atribuir permissões para incluir apenas as visualizações que criei, e o acesso foi negado. Um usuário ou grupo de usuários também precisa ter permissões na tabela da qual a exibição se origina para acessar a exibição?
fonte
Respostas:
Sim. Não é suficiente conceder autoridade para usar uma exibição. O usuário também deve ter autoridade para a tabela subjacente também.
Uma maneira de permitir o acesso a um usuário restrito é a autoridade adotada. Por uma questão de exemplo, vamos assumir o seguinte:
O usuário RESTRICTED não tem acesso a nenhuma tabela. Todas as bibliotecas são AUT (* EXCLUDE) - ou - o usuário RESTRICTED possui * EXCLUDE autoridade para todas as bibliotecas. O USUÁRIO PERMITIDO pode acessar (ou possuir) as tabelas e bibliotecas. A biblioteca DATA possui as tabelas. A biblioteca PROGRAMS possui os programas e procedimentos armazenados.
PERMITIDO criar um procedimento armazenado RPG na biblioteca PROGRAMAS. Verifique se o programa possui USRPRF (* OWNER) especificado. Isso significa que, quando o programa for executado, ele usará a autoridade do proprietário (PERMITTED) em vez da autoridade do perfil que o executa (RESTRICTED).
Conceda ao usuário a autoridade PERMITTED * USE para o objeto do programa RPG - ou - GRANT via SQL. Além disso, conceda ao usuário RESTRICTED * USE o acesso à biblioteca PROGRAMS. Isso permitirá que a RESTRICTED execute o procedimento / programa armazenado.
Observe que o usuário RESTRICTED não tem direitos para acessar as tabelas em DATA e você deseja deixá-lo dessa maneira.
Agora faça com que o usuário RESTRICTED use SQL para CHAMAR o procedimento armazenado. Ela tem autoridade para executar o programa porque possui direitos * USE na biblioteca PROGRAMS, bem como no objeto de programa compilado. O procedimento armazenado é executado sob a autoridade do proprietário, PERMITTED e, como PERMITTED tem acesso total à biblioteca DATA e às tabelas, o procedimento armazenado pode acessar / atualizar essas tabelas. Qualquer SQL bruto que o RESTRICTED tente usar falhará devido à autoridade insuficiente - a única coisa que ela pode fazer é chamar os procedimentos armazenados criados para ela.
Se seus programas estiverem armazenados na mesma biblioteca que seus dados, será necessário conceder autoridade RESTRICTED * USE à biblioteca e restringi-la especificamente (via * EXCLUDE) sobre todas as tabelas nessa biblioteca. Pode ser mais fácil criar uma biblioteca RESTRITA que retém apenas os procedimentos armazenados e autorizá-la a essa biblioteca. Isso facilita a manutenção contínua, porque você não precisará se lembrar de continuar restringindo-a das tabelas recém-criadas no DATA.
fonte