Restringindo um usuário a acessar apenas suas próprias tabelas no Oracle SQL Developer

0

Estou confuso na permissão, privilégios no SQL Oracle Developer. O usuário criado pode acessar todas as tabelas do esquema / usuário. Eu quero restringir o usuário específico no banco de dados para acessar (ALTER, DROP, UPDATE etc) para suas próprias tabelas apenas. Alguém pode me especificar como realizar essa tarefa?

Eu quero dizer quais privilégios escolher entre privilégios de sistema para o usuário acessar apenas suas próprias tabelas. Obrigado

    
por AbdulAziz 13.07.2012 / 21:12

1 resposta

4

Contanto que você não conceda explicitamente uma permissão, o usuário não a terá. Apenas vamos usar um pequeno excursus:

CREATE USER dummy IDENTIFIED BY password;

Agora esse usuário existe - mas não é possível fazer logon no banco de dados. Ele não tem permissões ainda. Somente depois de

GRANT CREATE SESSION TO dummy;

esse usuário pode fazer logon, mas não mais. Para ser capaz de fazer as coisas dentro de seu próprio esquema, geralmente se concede coisas como

GRANT CREATE TABLE, CREATE VIEW, ALTER TABLE, DROP TABLE TO dummy;

Agora ele faz as coisas - mas apenas em seu próprio esquema. Ele também pode inserir, atualizar, excluir - mas ainda é restrito a seus próprios objetos. Para adulterar (ou mesmo apenas ver) os dados de outros usuários, o outro usuário deve conceder explicitamente isto:

GRANT SELECT ON some_table TO dummy;

ou o DBA lhe concede permissões globais:

GRANT SELECT ANY TABLE TO dummy;

Então você terá que verificar quais permissões o usuário possui. Como há muitas permissões possíveis, minha resposta pode ficar muito longa - mas, especialmente, atente para as permissões, incluindo a palavra-chave ANY (como no meu último exemplo). Além disso, verifique as possíveis funções concedidas a esse usuário, o que pode incluir tais permissões. Sendo logado como sysdba, você pode verificá-los, por exemplo com a seguinte consulta:

SELECT granted_role
  FROM dba_role_privs
 WHERE grantee='DUMMY';

(observe o nome de usuário UPPERCASE aqui - é assim que a Oracle os armazena internamente, e é diferencia maiúsculas de minúsculas). Para os primeiros privilégios mencionados (diretos), isso seria:

SELECT privilege
  FROM dba_sys_privs
 WHERE grantee='DUMMY';

Depois de descobrir quais são os privilégios / funções concedidos a esse usuário especial que ele deve não ter, você pode removê-los dele, por exemplo:

REVOKE SELECT ANY TABLE FROM dummy;
    
por 14.07.2012 / 21:24