Permissões do IBM System i em exibições de banco de dados

8

Temos um IBM System i executando o IBM i OS v6r1. Neste sistema, criei algumas visualizações de banco de dados. O que eu quero fazer é dar a um grupo de usuários específico acesso a somente essas visualizações e nada mais dentro da biblioteca em que as visualizações residem. Isso é possível? Eu tinha um grupo de usuários que tinha permissões de leitura somente para todas as tabelas e exibições na biblioteca em que minhas exibições estão localizadas e o acesso funciona quando o usuário está nesse grupo de usuários. Eu tentei copiar o grupo de usuários e, em seguida, atribuir permissões para incluir apenas as exibiçõ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 visualização se origina para acessar a exibição?

    
por Big EMPin 05.11.2013 / 15:39

1 resposta

4

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.

    
por 08.11.2013 / 16:42