Ir ao conteúdo
  • Cadastre-se

Oracle Senhas Expirada usando VB6!!


gust_infomaster

Posts recomendados

Bem pessoal estou com um problemão, trabalho num empresa que possui vários usuários com acesso a bancos do Oracle, e me foi pedido um programinha que alterasse essa senha de acesso.

bem o programa e simples e ja funciona, meu problema hoje e com usuários expirados.

bem o que acontece é que quando o usuário esta espirado eu nao tenho como entrar no banco para fazer o desbloqueio e a devida troca de senha, estou usando o VB6 para desenvolver a aplicação.

quando o Vb me retorna ERRO eu trato este erro logando com um usuário administrativo com acesso específico para trocar este senha e liberar o usuário, mas por medidas de seguranda os arquitetos do projeto recusaram a ideia pois se alguem conseguisse invadir este código teria acesso á senha deste usuários administrativo já que seria statico no código do programa. =P

bem tendo como comparação o bem dito SQL Plus, que quando o usuário loga estando esperido imediatamente o SQL Plus lhe pede que troque de senha ja desbloqueando o usuário, realmente é mais usual desta maneira, porém não vejo como fazer isto usando VB alguem sabe algum meio.

caso nao tenha ficado calro eu esplico de outra forma hauahua ^_^

to precisando disso urgenteeeeeeeee brigadão a quem se dispor a mi ajudar

Link para o comentário
Compartilhar em outros sites

Qual provider você está usando para conectar no servidor?

O OraOLEDB aceita uma parâmetro PwdChgDlg (password change dialog) que cuida de exibir uma caixa de diálogo pedindo a alteração da senha para o usuário, se necessário. (a partir da v9, se não estou enganado...)

Dá uma olhada na documentação aqui

JP

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

valeuuuuuuu cara, por ora eu achei um outro jeito em C#, q pessoal aqui aceitou, mas pelo que ja ouvi talvez vou ter de mudar de novo e vou tentar o que você me postou OK vlwwwwwwww

A oracle desenvolveu uma ferramenta que quando usuário expirado você a chama.

Ou seja, quando sua conexão for recusada pelo servidor, o oracle retornará o ERRO 28001 (correspondente a usuário expirado)

ai no tratamento deste erro você chama o seguinte código, fiquei de preguissa e coloquei o código inteiro bom que da pra entender melhor.

PS, só consegui fazer em C#, em VB não fui muito bem sucedido não.

e para usar o namespace da oracle "using Oracle.DataAccess.Client;"

tem que instalar um componente disponível pra download no site da empresa.

//código

Código:

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Web;

using System.Web.SessionState;

using System.Web.UI;

using System.Web.Security;

using System.Web.Util;

using System.IO;

using Oracle.DataAccess.Client;

namespace exeAlterPassOracle

{

/*

* §o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o §o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o

* DESENVOLVEDOR: Gustavo Neves Alves - USER: AX04767 - EMPRESA: RCS Informática

* DATA: 10 DE JANEIRO DE 2008

*

* DESCRIÇÃO SISTEMA: Módulo usado em conjunto com formulários HTML (Index.html), respon

* sável por executar a solicitação de alteração vinda do formulário.

*

* RETORNO: Sistema retorna o erro do oracle independente se ouve ou não erro.

* §o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o §o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o

*/

public class clsExeAlterPassWord : System.Web.UI.Page

{

private void Page_Load(object sender, System.EventArgs e)

{

string qstrAlias, qstrUser, qstrOldPass, qstrNewPass;

qstrAlias = Request.QueryString["txbAlias"];

qstrUser = Request.QueryString["txbUser"];

qstrOldPass = Request.QueryString["txbOldPass"];

qstrNewPass = Request.QueryString["txbNewPass"];

//§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o §o§o§o§o§o§o§o§o§o§o§o§o§o§o

// PROVIDER DE CONEXÃO COM O BANCO DE DADOS

//§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o§o §o§o§o§o§o§o§o§o§o§o§o§o§o§o

string strProvider = "User Id=" + qstrUser +

";Password=" + qstrOldPass +

";Data Source=" + qstrAlias;

//CRIA CONEXÃO COM O BANCO DE DADOS

OracleConnection objConnection = new OracleConnection(strProvider);

try

{

/*

* TRY | CATCH RESPONSÁVEL POR TENTAR ABRIR A CONEXÃO COM O BANCO DE DADOS

* E RODAR INSTRUÇÃO SQL PARA ALTERAÇÃO DE SENHA

* EM CASO DE ERRO SYSTEMA TRATARÁ OS ERROS NO CATCH

*/

objConnection.Open();

using (OracleCommand objCommand = new OracleCommand())

{

objCommand.CommandType = CommandType.Text;

objCommand.CommandText = "ALTER USER " + qstrUser + " IDENTIFIED BY " + qstrNewPass;

objCommand.Connection = objConnection;

objCommand.ExecuteNonQuery();

//lblResult.Text = "0;0";

Response.Write("0;0");

}

}

catch(OracleException ex)

{

/*

* CASO HAJA ERRO NO PROCESSO DESCRITO ACIMA, O CATCH FICARÁ RESPONSÁVEL POR CAPTURAR

* O ERRO DO ORACLE NA OBJETO "ex", (VER PARAMETRO "OracleException ex")

* É FEITO UM CASE(SWITCH) PARA TRATAR OS DIFERENTES TIPOS DE ERROS

* NO CASO DO 28001 (INDICA USUÁRIO EXPIRADO), USAMOS A FUNÇÃO "OpenWithNewPassword" QUE IRÁ

* INSTANCIAR UMA NOVA CONEXAO COM O BANCO DE DADOS TROCANDO A SENHA DO USUÁRIO

* E DESBLOQUEANDO O MESMO

*/

switch(ex.Number)

{

case 28001:

objConnection.OpenWithNewPassword(qstrNewPass);

break;

default:

//lblResult.Text = ex.Number + ";" + ex.Message;

Response.Write(ex.Number + ";" + ex.Message);

break;

}

}

finally

{

//FECHA CONEXAO COM O BANCO DE DADOS CASO ELE ESTAJA ABERTA

if (objConnection.State == ConnectionState.Open)

objConnection.Close();

//LIBERA DA MEMORIA OBJ CONNECTION

objConnection.Dispose();

objConnection = null;

}

}

}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...