PDA

Ver la Versión Completa : Ocultar ConnectionString TADOConnection


IsidoroM
24-05-2006, 16:01:38
Buenas,

estoy intentando ver la manera de ocultar las property ConnectionString y ConnectionObject del objeto TADOConnection con el objeto de que un programador pueda utilizar este objeto de conexión a la BBDD con unos valores preestablecidos y que no puedan leerse así evitar que el equipo de programación pueda conocer el usuario, contraseña, ... de acceso a la BBDD.

He probado de crear una clase nueva que herede de TADOConnection sobreescribiendo la funcion read de la propiedad ConnectionString, pero si esta nueva clase la instancio en un TADOConnection me vuelve a ejecutar la funcion read del TADOConnection mostrando de nuevo el contenido del ConnectionString.

¿Alguien tiene alguna idea?

Gracias y un saludo.

luisgutierrezb
24-05-2006, 21:54:20
porque no creas un componente que se llame algo asi como TMyConexion donde tengas las propiedades que necesites para la conexion, y haces un metodo de conectar o algo asi, que mande llamar a un TAdoConnection que hayas creado en tu componente, asi todo quedara oculto.

mazinger
24-05-2006, 22:22:20
Yo encriptaria el valor de ConnectionString y lo cargas en tiempo de ejecución con algún método que desencripte la cadena.

Neftali
25-05-2006, 10:01:38
Aquí discutimos (http://www.clubdelphi.com/foros/showpost.php?p=65465&postcount=3) en su día, cómo ocultar propiedades published de un componente; Puedes probarlo con el tuyo; Pero me parece una tarea imposible initentar "ocultarle" a un programador que va a trabajar con eso la cadena de conexión... Se me ocurre que aunque pudieras ocultarsela visualmente, siempre podrá programar un código para verla...

Si debe programar:

ADOQ.Active := True;


Siempre podrá hacer:

MessageDlg(ADOQ.ConnectionString, mtInformation, [mbOK], 0);
MessageDlg(ADOQ.Connection.ConnectionString, mtInformation, [mbOK], 0);
...

IsidoroM
25-05-2006, 17:01:59
Buenas,

conseguí ocultar la propiedad ConnecionString de la siguiente manera:


type
TADOConnectionEclipse = class(TADOConnection) // Ocultar ConnectionString y ConnectionObject
private
FConnectionString: WideString;
function GetConnectionString: WideString;
protected
public
property ConnectionObject;
published
property ConnectionString read GetConnectionString;
end;


sobreescribiendo la funcion GetConnectionString por el código que me devuelva un texto diferente al de conexión.

El problema fué que cuando creaba un objeto de esta manera:

var
ace:TADOConnectionMio;
begin
ace:=TADOConnectionMio.Create(Self);

y llamaba a ace.ConnecionString el resultado era el esperado: me enseñaba el resultado que le había dado a la propiedad, pero si hago esto:

var
ace:TADOConnectionMio;
begin
ace:=TADOConnection.Create(Self);

y ejecuto ace.ConnectionString, me ejecuta la función read del objeto TADOConnection mostrándome el valor real del ConnectionString.

He mirado en el tema del foro que comenta Neftali donde comentan: "El nivel de visibilidad de una propiedad o método no puede degradarse, sólo aumentarse", por lo que sería imposible realizar lo que quiero de esta manera.