Concedendo privilégios a usuários e roles

Da mesma forma que no SAP ECC os desenvolvedores ABAP não utilizam o usuário DDIC e os profissionais Basis não utilizam o usuário SAP*, no Hana o usuário SYSTEM não deveria ser usado pela massa. Ao invés disso, usuários e roles devem ser criados para lidar com o gerenciamento de uso no que tange a segurança da informação. Antes de trabalhar de fato com schemas, tabelas, visões, sequências, etc recém criados no Hana é necessário pensar como e de quem será o uso deste(s) artefato(s). Neste post você vai aprender a atribuir privilégios no SAP Hana usando o Eclipse devidamente instalado e configurado.

Gerenciamento de usuários e roles no SAP Hana

O gerenciamento de usuários e roles no SAP Hana é feito usando o Eclipse/Studio, mais especificamente na visão “Systems”, presente em todas as perspectivas. Para editar um usuário ou role, basta clicar 2x em seu nome.

Usuários e Roles

Usuários e Roles

Propriedades de um usuário no SAP Hana

Além de ID e senha, um usuário possui um conjunto de privilégios atribuídos direta ou indiretamente a ele.

  • Direta: os privilégios aos artefatos (schemas, tabelas, visões, etc) são atribuídas diretamente ao usuário
  • Indireta: os privilégios aos artefatos são atribuídas primeiramente a um conjunto de roles e sequencialmente o conjunto de roles são atribuídos ao usuário.

Vejamos abaixo algumas roles e privilégios atribuídos a um usuário já existente.

Roles de um usuário

Roles de um usuário

 

Privilégios de objetos de um usuário

Privilégios de objetos de um usuário

 

Propriedades de uma role no SAP HANA

Uma role pode ser entendida simplesmente como um conjunto de privilégios. Uma role pode ser atribuída a vários usuários que devem ter o mesmo tipo de acesso. Roles quando bem usadas facilitam o gerenciamento de usuários e seus privilégios além de ajudar a garantir a segurança da informação. Quando mal usadas, você pode adivinhar o que está em jogo.

Vejamos agora uma role já existente no Eclipse.

Privilégios de objetos de uma role

Privilégios de objetos de uma role

Privilégios

Dependendo do artefato em que é concedido acesso, há uma gama de privilégios que podem ser atribuídos ao usuário ou role.

Por exemplo,schemas e tabelas possui o privilégio select que permite que seleções sejam feitas naqueles artefatos. Todavia, tabelas não possuem o privilégio debug, enquanto schemas possuem o mesmo. De novo, os privilégios permitidos variam de acordo com o artefato em questão. Os possíveis privilégios podem ser visto simplesmente clicando no artefato dentro de um usuário ou role, não importa.

Diferentes privilégios de acordo com objeto

Diferentes privilégios de acordo com objeto

Atribuindo privilégios a usuários e roles

Uma maneira de atribuir privilégios a usuários ou roles (e até de atribuir roles a usuários) é diretamente pelos editores de usuários e roles. Como pode ser visto nas imagens pouco acima cada uma das abas de privilégios possuem botões para adição e remoção de itens.  Esta forma é tão simples e intuitiva que este parágrafo basta para explicar seu funcionamento.

Outra maneira de atribuir privilégios é via comandos SQL, que podem ser executados no console SQL também no Eclipse. Caso você tenha mais de um ambiente adicionado no seu Eclipse sempre garanta que o script a ser executado está ligado ao ambiente correto.

Vamos aqui ver alguns exemplos deste tipo de atribuição usando 2 procedures do schemas _SYS_REPO:

  • Atribuir schemas a usuários e roles: GRANT_SCHEMA_PRIVILEGE_ON_ACTIVATED_CONTENT
  • Atribuir objetos (artefatos) a usuários e roles: GRANT_PRIVILEGE_ON_ACTIVATED_CONTENT

Concedendo privilégios a schemas (GRANT_SCHEMA_PRIVILEGE_ON_ACTIVATED_CONTENT)

A procedure GRANT_SCHEMA_PRIVILEGE_ON_ACTIVATED_CONTENT do schema _SYS_REPO é usada para dar privilégios de trabalhar com um schema para usuários e roles.

Esta procedure tem 3 parâmetros:

  1. Privilégio ( create any | alter | drop | execute | select | insert | update | delete | index | trigger | debug | references )
  2. Nome do objeto (no caso um schema)
  3. Nome do usuário/role

No exemplo abaixo, há uma chamada para cada possível privilégio para um schema chamado “NYT” e um usuário chamado “PAGOTI” (mas também poderia ser uma role com o mesmo nome).

Se você se perguntou “E SE possuirmos um usuário e role com mesmo nome?” Boa pergunta. A resposta é que isso não é possível pois quando se cria um usuário por exemplo é verificado se uma role com aquele nome já existe e vice-versa. Caso seja o caso, as mensagens abaixo são exibidas e a criação é cancelada.

Could not create role ‘PAGOTI’ User already exists

Could not create user ‘PAGOTI’ Role already exists

Cuidado: Nomes de usuários e roles são case sensitive

Revogando privilégios a schemas

Errou? Precisa tirar o acesso a um schema de usuário ou role? Basta usar a procedure

_SYS_REPO.REVOKE_SCHEMA_PRIVILEGE_ON_ACTIVATED_CONTENT. Ou seja, basta substituir GRANT por REVOKE. Esta dica vale para as outras procedures GRANT* do schema _SYS_REPO.

Concedendo privilégios a tabelas (GRANT_PRIVILEGE_ON_ACTIVATED_CONTENT)

Uma procedure um pouco mais genérica é usada para dar privilégios de acesso a outros objetos que não schemas, como tabelas, visões, sequências, procedures, etc. Estou falando da procedure GRANT_PRIVILEGE_ON_ACTIVATED_CONTENT.

Esta procedure tem os mesmos 3 parâmetros.

  1. Privilégio ( aqui as opções variam de acordo com o objeto em questão )
  2. Nome do objeto (notação com aspas do tipo “pacote.subpacote::MinhaTabela”)
  3. Nome do usuário/role

Veja o exemplo abaixo com todos os privilégios possíveis de uma tabelas sendo atribuídos a um usuário chamado “PAGOTI”. No exemplo a tabela “APIS” fica situada no pacote pagoti.demos.nyt. Note os 2 : entre o pacote completo e o nome do objeto.

Concedendo privilégios a sequências (GRANT_PRIVILEGE_ON_ACTIVATED_CONTENT)

Usando a mesma procedure, podemos conceder privilégios de uma sequência. Note que as possíveis opções de privilégios variam pois não estamos mais ligando com uma tabela.

Caso queira desfazer um privilégio concedido: use a procedure _SYS_REPO.REVOKE_PRIVILEGE_ON_ACTIVATED_CONTENT conforme mencionado anteriormente. Como pode ser percebido, está função é mais genérica e pode ser usada para outros objetos (como procedures por exemplo).

Conclusão

Resolva a questão de usuários e roles assim que os objetos são criados. Isso evitará muitos problemas em tempo de desenvolvimento. Claro, não dê mais nem menos acessos que o necessário.

Gostou do post? Não deixe de deixar um comentário aqui no Hana Brasil! Não gostou? Deixe também!

3 thoughts on “Concedendo privilégios a usuários e roles

  1. CLÁUDIA DE OLIVEIRA

    Olá Fábio Ferri e Fábio Pagoti
    Achei super legal e interessante este post. Parabéns!!!
    Sou da area de Security e estou em um cliente ao qual acabou de migrar do SAP R/3 4.7 para SAP ECC EHP7Hana on Cloud
    Gostaria muito de aprender mais sobre Gerenciamento de usuários e roles no SAP Hana Studio e também a uilização do Eclipse na parte de roles e usuários
    Vocês ministram cursos também? ou podem indicar algum lugar onde se possa fazer um Curso/Workshop voltado para minha necessidade?

    Muito Obrigada
    Cláudia

  2. fabiopagoti Post author

    Olá Cláudia!

    Fico feliz por ter gostado do post.

    Eu dou aulas de UI5, Fiori, HANA, Gateway entre outras coisas na Private Training, uma empresa de treinamentos da 4Business IT.

    Além dos cursos voltados a desenvolvimento temos cursos voltados a Basis: Fiori 4 Basis, e principalmente no seu caso HANA 4 Basis.

    Dê uma olhada em ambos cursos,

    http://www.4business-it.com.br/#!basis/ct3d

    Para esclarecer qualquer outro ponto sobre estes cursos, use o formulário de contato do site.

    http://www.4business-it.com.br/#!contato/con8

    Abraços!

  3. Vanessa

    Boa tarde,

    No meu sap hana studio, não consigo nem modificar, clicando duas vezes no meu user, fala que não tenho permissão de ADM. Como resolvo isso??

    Obrigada.

Leave a Reply

Your email address will not be published. Required fields are marked *