Sim. Não é suficiente conceder autoridade para usar uma visão. O usuário também deve ter autoridade para a tabela subjacente.
Uma forma de permitir o acesso a um usuário restrito é a autoridade adotada. Por exemplo, vamos supor 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 autoridade * EXCLUDE para todas as bibliotecas. USER PERMITTED pode acessar (ou possuir) as tabelas e bibliotecas. Biblioteca DATA tem as tabelas. Biblioteca PROGRAMAS tem os programas e procedimentos armazenados.
Ter PERMITIDO criar um procedimento armazenado RPG na biblioteca PROGRAMAS. Certifique-se de que o programa tenha USRPRF (* OWNER) especificado. Isso significa que, quando o programa for executado, usará a autoridade do proprietário (PERMITIDO) em vez da autoridade do perfil que o está executando (RESTRICTED).
Concede ao usuário PERMITTED * USE autoridade para o objeto de programa RPG - ou - GRANT via SQL. Além disso, conceda acesso de usuário RESTRICTED * USE a biblioteca PROGRAMS. Isso permitirá que RESTRICTED execute o procedimento / programa armazenado.
Observe que o usuário RESTRICTED não tem direitos para acessar as tabelas em DATA e você quer deixar dessa maneira.
Agora, o usuário RESTRICTED usa SQL para chamar o procedimento armazenado. Ela tem autoridade para executar o programa porque possui direitos * USE para PROGRAMAS de biblioteca, bem como o objeto de programa compilado. O procedimento armazenado é executado sob a autoridade do proprietário PERMITIDO e, desde que PERMITIDO tenha acesso total ao DATA da biblioteca e às tabelas contidas nele, o procedimento armazenado pode acessar / atualizar essas tabelas. Qualquer SQL bruto que o RESTRICTED tenta usar falhará devido à autoridade insuficiente - a única coisa que ela pode fazer é chamar os procedimentos armazenados criados para ela.
Se os seus programas estiverem armazenados na mesma biblioteca que seus dados, você precisará conceder a autoridade RESTRICTED * USE à biblioteca e restringi-la especificamente (via * EXCLUDE) a todas as tabelas dessa biblioteca. Pode ser mais fácil criar uma biblioteca RESTRICTED que mantenha apenas os procedimentos armazenados e autorize-a para essa biblioteca. Isso facilita a manutenção contínua, porque você não terá que tentar se lembrar de mantê-la restrita a novas tabelas criadas em DATA.