Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Ado Y Password (https://www.clubdelphi.com/foros/showthread.php?t=15478)

joanajj 25-10-2004 12:18:03

Ado Y Password
 
Buenos días, me gustaría saber si saben como, o por lo menos decirme donde puedo mirar, como poner una clave en ado en tiempo de diseño y luego poder modicarla en tiempo de ejecución.

El caso es una aplicación que el cliente acceda con una clave inicial que yo pongo, y que luego el a su gusto la pueda modificar.


Un saludo...

Neftali [Germán.Estévez] 25-10-2004 12:34:15

¿Con qué Base de Datos estás trabajando?
La clave que pones en ADO en realiadad es la de la BD (ADO en sí es un método de acceso, no tiene clave).
En Bases de Datos de escritorio te puede servir utilizar la clave de acceso a la Base de Datos. Definir tú una inicialmente y luego que el cliente la cambie.

joanajj 25-10-2004 12:56:55

trabajo con access
 
Gracias por responder pronto. Trabajo con access. Supongo que la clave la puedo poner inicialmente con access, pero como la modifico en tiempo de ejecución???


Un saludo...

Neftali [Germán.Estévez] 25-10-2004 14:08:54

Se puede hacer compactando la Base de Datos y dando un nuevo password para el proceso.
Importa la librería "Microsoft Jet and Replication Objects 2.6 Library" desde delphi y utiliza el siguiente código:

Código Delphi [-]
uses JRO_TLB;
 
procedure TForm1.Button1Click(Sender: TObject);
var
 engine: IJetEngine;
 src, dst, path: WideString;
begin
 // Directio donde se encuentra
 path := 'c:\temp\';
 //src: Base de Datos existente con assword antiguo
 src := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + path + 'dbdemos.mdb' +
  ';Jet OLEDB:Database Password=ANTIGUO';
  //dst: Base de Datos nueva con password cambiado
 dst := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + path + 'dbDemosNew.mdb' +
  ';Jet OLEDB:Database Password=NUEVO';
 
  // Compactar y cambiar el password
 engine := CoJetEngine.Create();
 engine.CompactDatabase(src, dst);
end;

La Base de Datos se debe abrir en modo exclusivo. Ésto te debe generar una base de datos nueva con el nuevo password; Si deseas luego puedes borrar la antigua (DeleteFile) y renombrar la nueva (RenameFile).

joanajj 26-10-2004 11:26:41

Funcionaaaa!!! una duda más
 
Buenos días, ante todo gracias. He probado lo que me dijistes y funciona perfectamente. Incluso, me facilita la tarea de compactar y reparar, ya que para hacerlo, usaba un createole yu llamaba a funciones access, lo que implica que el usuario tenga access instalado, y de esta forma no.
Tenga un par de dudas acerca de lo mismo, y te las pongo aquí para no salir del tema.

1ª) De la misma forma, aparte de cambiar la clave, es posible cambiar el usuario admin??? donde puede ver las funciones que hay en la librería que me dijistes???

2º) Necesito encriptar la clave de BD, pero el problema es que para introducir la clave sale el login prompt de BD, sabes si hay un evento al que pueda llamar antes de que la base de datos reciba la clave. Es decir

Clave: hola
encriptada:(,&/
Entonces en login prompt: usuario admin clave: hola(pero la bd debe recibir (,&/, )no se si lo has pillado. Además, es posible meter la clave a la BD a mano, para evitar el login prompt y así personalisar la petición de clave??

Espero no haberte enrrollado, un saludo...

Neftali [Germán.Estévez] 26-10-2004 13:14:23

Cita:

Empezado por joanajj
1ª) De la misma forma, aparte de cambiar la clave, es posible cambiar el usuario admin??? donde puede ver las funciones que hay en la librería que me dijistes???

2º) Necesito encriptar la clave de BD, pero el problema es que para introducir la clave sale el login prompt de BD, sabes si hay un evento al que pueda llamar antes de que la base de datos reciba la clave. Es decir

(1) Dentro de la cadena de conexión se pueden añadir:
User ID=Admin;Password=Password;
donde puedes colocar éstos parámetros de conexión.

(2) La Clave a mano puedes introducirla como te he comentado antes.

joanajj 26-10-2004 13:56:17

Lo probaré
 
Gracias de nuevo, por responder. Voy a probar.
Pero hay algo que no comprendo, la cadena que me pasastes era para compactar y cambiar clave, pero para identificarse sería otra cadena??? ya que al arrancar la aplicación, solo necesito identificarme y evitar el login prompt.


Gracias de nuevo...

joanajj 27-10-2004 11:02:41

He probado y funciona...
 
He probado y funciona correctamente, lo único es que para validar la clave, la he pasado a través del connectionstring, y funciona perfecto.
Una ultima cosa y con esto cierro el tema( y no te doy más la lata-de momento ;-)

Crees que es viable pasar la clave encriptada a la base de datos, ya que si el usuario la olvida imagino que la única forma de recuperarla es madiante un programa que obtenga la clave de la BD, pero si está encriptada igual puede ser mas complicado recuperrarla o no???

Neftali [Germán.Estévez] 28-10-2004 10:52:57

Cita:

Empezado por joanajj
Crees que es viable pasar la clave encriptada a la base de datos, ya que si el usuario la olvida imagino que la única forma de recuperarla es madiante un programa que obtenga la clave de la BD, pero si está encriptada igual puede ser mas complicado recuperrarla o no???

(1) No es posible pasar la clave encriptada dentro de la cadena de connectionString.
(2) Dile al usuario que mejor que no pierda la clave porque sino perderá los datos.
(3) Si aun así la pierde hay en Internet varios programas que extraen la clave de un archivo de Access en sus diferentes versiones (eso no se lo digas al usuario ;) ).

joanajj 28-10-2004 13:07:19

Neftalí una cosa más...
 
Anoche probé y pude encriptar la clave, cambiarla con el JRO que me pasastes, y luego, paso la clave encriptada al conecctionstring y sin problem.

uso compact, pongo clave vieja encriptada, pongo la nueva encriptada, y la cambia. Luego modifico el connectionstring: cadena1+clave+cadena2, la pongo activa, y pa lante.
Te lo digo para que lo sepas,por si acaso.



Un saludos grande y gracias por tu ayuda, seguro que algo tendré que volver a preguntar, así que ya me verás por el foro.

Neftali [Germán.Estévez] 28-10-2004 16:23:55

Entonces si lo has podido hacer es que no entendí bien lo que me explicabas...:( , de todas formas me alegro de que esté solucionado. :)


La franja horaria es GMT +2. Ahora son las 21:05:56.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi