Existem várias maneiras de encontrar privilégios de usuário no Oracle, dependendo do nível de detalhe necessário e se você está analisando usuários específicos ou em todo o sistema. Aqui estão alguns métodos comuns:
1. Usando as visualizações `dba_sys_privs` e` dba_tab_privs`: Essas visualizações de dicionário de dados fornecem informações abrangentes sobre os privilégios de sistema e objetos concedidos aos usuários. `Dba_sys_privs` mostra privilégios do sistema (por exemplo,` create tabela`, `Create Session`), enquanto` dba_tab_privs` mostra privilégios de objeto (por exemplo, 'select`, `insert`,` atualização' em tabelas específicas).
*
para privilégios do sistema: `` `SQL
Selecione * de dba_sys_privs onde o donatário ='nome de usuário';
`` `
Substitua o 'nome de usuário` pelo nome de usuário real.
*
Para privilégios de objeto: `` `SQL
Selecione * de dba_tab_privs onde o donatário ='nome de usuário';
`` `
Substitua o 'nome de usuário` pelo nome de usuário real. Isso mostrará todos os privilégios em todas as tabelas. Você pode refinar esta consulta para olhar para tabelas específicas:
`` `SQL
Selecione * de dba_tab_privs onde o donatário ='nome de usuário' e tabela_name ='tabela_name';
`` `
Substitua `tabela_name` pelo nome da tabela.
2. Usando as visualizações `all_sys_privs` e` all_tab_privs`: Essas visualizações fornecem informações sobre os privilégios que um usuário * tem * diretamente ou indiretamente através de funções. Isso é útil para um usuário verificando seus próprios privilégios. Se você se conectar como usuário, poderá usar estas visões:
*
para privilégios do sistema: `` `SQL
Selecione * de all_sys_privs;
`` `
*
Para privilégios de objeto: `` `SQL
Selecione * de all_tab_privs;
`` `
Você também pode filtrar o nome de usuário como as visualizações `dba_`.
3. Usando as visualizações `user_sys_privs` e` user_tab_privs`: Essas visualizações mostram apenas os privilégios diretamente concedidos ao usuário conectado. Eles não mostram privilégios concedidos através de papéis. Útil para um usuário vendo apenas seus próprios privilégios diretos.
*
para privilégios do sistema: `` `SQL
Selecione * de user_sys_privs;
`` `
*
Para privilégios de objeto: `` `SQL
Selecione * de user_tab_privs;
`` `
4. Usando a coluna `função` nas visualizações anteriores: A coluna `função` em` dba_sys_privs`, `dba_tab_privs`,` all_sys_privs`, `all_tab_privs` indica se o privilégio é concedido diretamente ou através de uma função. Se for concedido por meio de uma função, você precisará investigar os privilégios concedidos a esse papel. Você pode encontrar informações sobre funções usando as visualizações `dba_roles`,` all_roles` ou `user_roles`, dependendo do seu nível de acesso.
5. Usando `show user`: Este comando (no SQL*plus ou no desenvolvedor SQL) mostrará o usuário atualmente conectado. Isso não está mostrando diretamente privilégios, mas é um ponto de partida usar as visualizações acima.
Considerações importantes: *
Funções de banco de dados: Os usuários geralmente recebem privilégios indiretamente por meio de funções. Você precisa examinar as funções a que um usuário pertence e os privilégios que essas funções têm. Isso requer a consulta das visualizações `dba_roles`,` all_roles` ou `user_roles`.
*
privilegia em cascata através de funções: As funções podem conceder privilégios a outras funções. Isso pode criar estruturas complexas de privilégio.
*
Níveis de acesso: Você precisa dos privilégios apropriados (por exemplo, `Selecione qualquer dicionário) para consultar as visualizações de dicionário de dados. Os visualizações `dba_` geralmente exigem a função` dba`.
Lembre -se de substituir o nome de usuário e o nome da tabela em que você está interessado. Sempre execute essas consultas com cautela, especialmente aquelas que usam as visualizações `dba_`, pois elas fornecem acesso a informações confidenciais.