Sobre la encriptación, tal vez no sea necesario encriptar la conexión si no los datos. Es decir, codificas los datos antes de enviarlos a la base de datos y los decodificas una vez obtenidos. En pseudocódigo:
Código Delphi
[-]
VAR
Dato: STRING
BEGIN
Dato := 'Este es el dato'
TablaDatos.Campo := FuncionCodificadora (Dato, ClaveCodificacion)
Dato := FuncionDecodificadora (TablaDatos.Campo, ClaveDecodificacion)
END
Incluso el nombre de las tablas y los campos puede estar codificado de alguna forma:
Código Delphi
[-]
SQLQuery.SQL := 'SELECT '+FuncionCodificadora ('NombreCampo', ClaveCodificacion).' FROM '+FuncionCodificadora ('NombreTabla', ClaveCodificacion)
Claro que el problema aquí está en que el nombre de los campos y tablas seguiría existiendo de forma legible en el ejecutable, pero hay formas de codificar dichos nombres "estáticamente" antes de compilar.
Se me entiende la idea, ¿no?