Pergunta

Eu tentei conceder CONNECT para um usuário através de uma função:

CREATE ROLE my_role IDENTIFIED BY "passwd";
GRANT CONNECT TO my_role;

CREATE USER my_user IDENTIFIED BY "passwd";
GRANT my_role TO my_user;

Quando eu tento isso em 10g Funciona bem, enquanto em 11g O login é rejeitado:

ORA-01045:user MY_USER lacks CREATE SESSION privilege; logon denied

Concessão CREATE SESSION para o papel não faz diferença.
Só posso fazer o login depois de conceder diretamente CONNECT (ou CREATE SESSION) para o usuário.

O Oracle mudou esse comportamento ou estou fazendo algo errado?

Foi útil?

Solução

Eu acho que você pode ter escapado com um "recurso" de segurança em 10g. A maneira como li o guia de referência e segurança do SQL para 11g indica que as funções habilitadas por senha exigem o uso do SET ROLE my_role IDENTIFIED BY passwd Antes de quaisquer direitos concedidos por esse papel, sejam eficazes.

Você não pode CREATE SESSION até que você tenha o papel, e você não pode ter o papel até emitir SET ROLE.

Catch-22.

Outras dicas

O Oracle Knowledge Base [ID 745407.1] explica isso.

A cláusula padrão na:

alterar as funções padrão do usuário; Especifica as funções concedidas por padrão ao usuário no logon. Esta cláusula pode conter apenas funções que foram concedidas diretamente ao usuário com uma instrução de concessão ou funções criadas pelo usuário com o privilégio de criação de função. Você não pode usar a cláusula de função padrão para ativar:

  1. Funções não concedidas ao usuário

  2. Funções concedidas através de outras funções

  3. Funções gerenciadas por um serviço externo (como o sistema operacional) ou pelo Oracle Internet Directory

  4. Funções que são autenticadas por senha.

  5. Funções que são implementadas como funções de aplicativos seguras.

Para funções autenticadas por senha, a alteração foi introduzida na versão 10.2.0.5 e 11.1.0.7. Para funções seguras de aplicativos, a alteração foi introduzida nos lançamentos do Oracle 10.2.0.4 e 11.1.0.7 Essas alterações serão aplicadas a todos os lançamentos futuros. As restrições acima mencionadas serão introduzidas na documentação futura.

Pode -se facilmente transformar as funções ativadas por senha em funções padrão executando o script resultante de:

Selecione 'ALTER ROUPE' || ROUPE || ' não identificado;' de dba_roles onde senha_required = 'sim' e função não em (selecione função de dba_application_roles);

Ativando as funções padrão (concedidas a um usuário como padrão) que também são protegidas por senha alteradas no Oracle 10G, versão 10.2.0.5 (pelo menos para nossa cópia). Na versão 10.2.0.5, uma função protegida por senha não seria mais ativada por padrão. Tinha que ser especificamente ativado com a senha apropriada.

Isso não foi documentado até onde poderíamos dizer. Mas quando nossos sistemas foram atualizados de 10.2.0.4 a 10.2.0.5, essa alteração quebrou vários de nossos sistemas e tivemos que criar funções paralelas não protegidas para nossas contas funcionais que não tinham nenhum mecanismo para ativar as funções padrão. Basicamente, criamos o antigo_role_batch sem senha como uma cópia do Old_role Whish foi protegida por senha.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top