Jump to content


Photo

Usuários Expirados No Oracle Usando Vb6


  • Faça o login para participar
1 reply to this topic

#1 Gustavo Neves Alves

Gustavo Neves Alves

    Novato no fórum

  • Usuários
  • 7 posts
  • Sexo:Masculino
  • Localidade:Ipatinga - MG

Posted 04/01/2008, 08:44

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 já funciona, meu problema hoje e com usuários expirados.

bem o que acontece é que quando o usuário esta espirado eu não 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 alguém 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 já desbloqueando o usuário, realmente é mais usual desta maneira, porem não vejo como fazer isto usando VB alguém sabe algum meio.

caso não tenha ficado calro eu esplico de outra forma hauahua

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

#2 Gustavo Neves Alves

Gustavo Neves Alves

    Novato no fórum

  • Usuários
  • 7 posts
  • Sexo:Masculino
  • Localidade:Ipatinga - MG

Posted 14/01/2008, 15:23

Resolvido pessoal.

A oracle desenvolveu uma ferramenta que quando usuário esta expirado voce 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 ASP nao fui muito bem sucedido nao.
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

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;

}
}
}




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq