Boa chiappa, já usei em uma situação pra criar um job com um schema de cliente sem saber a senha. Essa conexão ppr proxy é perigosa mesmo... hehehe Em 19/03/2014 19:07, <jlchia...@yahoo.com.br> escreveu:
> > > Pessoal, para uma determinada atividade que precisei executar, eu tive a > necessidade de conectar como um determinado usuário da Aplicação no banco , > usuário esse que desconhecia a senha, E um simples ALTER SESSION SET > CURRENT_SCHEMA não funcionaria (princiopalmente por ter que executar stored > PL/SQLs) : não é nada tão incomum, às vezes acontece... > Nesses casos o procedimento comum é conectar como DBA no banco, consultar > a senha do usuário desejado criptografada na DBA_USERS (ou na USER$ se for > banco 11g), pedir um ALTER USER nomedousuario IDENTIFIED BY > senhatemporariaqualquer; conectar no usuário desejado e imediatamente > voltar a senha ao que estava antes com um ALTER USER nomedousuario > IDENTIFIED BY VALUES ('stringdasenhacriptografada'). > > Essa técnica funciona desde sempre mas tem a desvantagem de, por uns > segundos que seja, o usuário desejado ficar com a senha alterada, o que > pode facilmente causar interrupção na aplicação, além de ser um tanto > complexo de se fazer . Hoje porém eu encontrei a referência em > http://www.dbsnaps.com/oracle/connect-as-an-oracle-user-without-knowing-the-password/que > na versão 10g, que é o que temos aqui em produção (o recurso existe no > sqlplus de 10gr2 em diante, iirc) o sqlplus já aceita conexão por proxy, aí > botei a mão na consciência e me perguntei porque não usar o recurso, né ? > Dãã pra mim... Então fiz assim : > > a. conectei no banco como SYSDBA > > b. temporariamente dei para um outro usuário que nós tinhamos a senha a > permissão de conectar como se fosse o usuário desejado : > > SYS:AS SYSDBA:SQL>alter user USER_APLIC grant connect through > USER_COM_SENHA_CONHECIDA; > > User altered. > > c. conectei num outra sqlplus como o usuário que temos a senha mas fazendo > proxy no usuário realmente desejado : > > USER_COM_SENHA_CONHECIDA::SQL>conn > USER_COM_SENHA_CONHECIDA[USER_APLIC]/senhaconhecida > Connected. > > USER_APLIC::SQL>show user > > USER is "USER_APLIC" > > d. no sqlplus original removi do usuário que conhecemos a senha a > permissão de conectar via proxy : > > SYS:AS SYSDBA:SQL>alter user USER_APLIC revoke connect through > USER_COM_SENHA_CONHECIDA; > > User altered. > > > e é isso... Achei mais simples de fazer e absolutamente não perturba a > Aplicação nem o pool de conexões nem nada, fikadika ... > > Abraços, > > José Laurindo Chiappa > > OBS : > > a. o link não fala, mas por segurança o RDBMS exige que o usuário com a > senha já conhecida e que vai receber o GRANT ** não seja ** um usuário > privilegiado, senão ele rejeita a operação com ORA-28150 : > > :@:SQL>conn system[userdestino]/senhadosystem > ERROR: > ORA-28150: proxy not authorized to connect as client > > b. DE FORMA ALGUMA isso que eu disse é um hack, um 'segredo interno' : > essa técnica está Plenamente Documentada nos manuais Oracle, então não > temos por que não divulgar... > > c. Falando sobre segurança, ela nos lembra o QUANTO é > ultra-mega-poderoso o privilégio de ALTER USER, e o perigo que é dar esse > privilégio para qualquer um que não é DBA... É um pouco parecido com o > privilégio de ALTER SESSION, que muita gente pede e recebe sem pensar duas > vezes mas que dá pra fazer muuuito estrago, principalmente ativando eventos > na sessão.... > >