Aller au contenu

Synchronisation entre bdd distante et locale


Recommended Posts

Bonjour à tous !

Je suis entrain de réaliser un logiciel qui aura besoin de synchroniser les données locales avec une base hébergée sur un serveur distant.

Pour la gestion des données locales, aucun souci à ce niveau là, mais pour ce qui est de se connecter à une base distante et de l'interroger, je ne sais pas trop vers où me diriger.

Auriez-vous des informations à ce sujet ? Des pistes à explorer ? Ou encore mieux, des tutos, des exemples ?

Merci d'avance !

TeChn4K

Lien vers le commentaire
Partager sur d’autres sites

Je n'ai pas encore ces infos. J'essaye de prendre un peu d'avance sur les points que je ne connais pas.

Le devis devrait être envoyé au client la semaine prochaine, il nous renverrait alors toutes ces infos après validation.

Dans ce cas, je reviendrais quand j'en saurais un peu plus ! Merci Androc.

Lien vers le commentaire
Partager sur d’autres sites

  • 2 weeks later...

J'en sais un peu plus sur la base distante que je vais interroger.

Ce sera une BDD de type MySql, hébergée sur un serveur distant auquel je me connecterai directement.

j'ai, ce weekend, réussi à taper dans une base locale via un DatabaseHelper.

Est-ce avec la même classe que je dois me tourner pour une base distante, de n'importe quel type ?

Merci de vos conseils !

Lien vers le commentaire
Partager sur d’autres sites

Techniquement je ne saurais pas te répondre, ne développant pas encore sous Android.

En revanche maintenant que tu sais précisément à quoi tu dois te connecter tu dois pouvoir faire une recherche plus précise sur le forum ou dans le SDK et trouver ton bonheur.

Si DatabaseHelper te permet de te connecter à un MySQL sur ta machine en locale (à moins que tu ne parles de ton téléphone lorsque tu parles de "locale") je ne vois pas pourquoi tu n'arriverais pas à te connecter à distance.

Lien vers le commentaire
Partager sur d’autres sites

Je ne crois pas qu'Android embarque les drivers odbc pour interroger directement une BDD mySQL.

Le plus propre est de séparer la couche persistance des données et accès distant aux données, afin de ne pas dépendre de la base utilisée.

C'est à dire, mettre un serveur entre la base et le téléphone qui s'occupera d'interroger la base et de fournir les données dans un format pratique pour le téléphone.

Lien vers le commentaire
Partager sur d’autres sites

Pourquoi ne pô monter une WebService simple sur le serveur en question pour faire le lien

C'est la solution la plus simple et la plus sécurisé aussi

Ou même un script PHP ?

+1 fluckysan' date='mais apres faut parser,mais jpense pas que sa soit trop dur[/quote']

Hum je crois que je me suis mal exprimé

Je pensais mettre en place un WebService ou un script PHP dans ce sens :

Le mobile envoît une requête au serveur via un httpRequest avec les paramètres qui vont bien (que ce soir lors de la récupération de données pour MAJ locale ou de l'envoie de données pour MAJ du serveur), le WebService comprend la requête et envoit le résultat ou MAJ la BDD serveur

Lien vers le commentaire
Partager sur d’autres sites

Ok, après avoir fouillé un peu partout, la meilleure façon de synchroniser une BDD locale Android avec une BDD distante serait que :

Le serveur distant génère un XML pour que l'appli Android le parse et rentre les infos dans la table.

Mais j'aimerai sécuriser un minimum cela pour que n'importe qui ne puisse pas accéder à mes données.

Avez vous une idée pour qu'Android puisse checker une page demandant au moins un mot de passe ?

En gros que le téléphone soit authentifié avant que le serveur renvoi le fichier xml ?

Pareil pour l'ajout d'une info : une httpRequest sur le serveur distant avec en paramètre les infos à ajouter. Mais pour le sécuriser ? Je peux envoyer dans un des paramètre le mdp chiffré en sha1 ?

Merci pour vos pistes !

Modifié par TeChn4K
Lien vers le commentaire
Partager sur d’autres sites

Si tu attaques une BDD distante directement tu devras donner un login/mdp pour te connecter.

En revanche, selon le type de BDD tu peux ne pas avoir de mécanisme de sécurité suffisant (mot de passe certes, mais en clair sur le réseau).

Tu peux essayer d'utiliser les facilités SSL afin d'encapsuler ton protocole de communication.

Car au final, tout dépend de qui ou de quoi tu veux te protéger ?

- Un type qui sait que ton service tourne et qui veut requêter en se faisant passer pour un téléphone ? Mot de passe suffisant dans ce cas qu'il soit passé en clair ou pas sur le réseau.

- Un type qui écoute sur la ligne. Dans ce cas que ton mot de passe soit en clair ou chiffré tu seras marron car il pourra rejouer le mot de passe. Il faudra passer par un mécanisme de graine aléatoire à ajouter au mot de passe à chaque authentification ou quelque chose de plus robuste.

- Un type qui peut manipuler la ligne et dans ce cas il te faudra un vrai mécanisme d'authentification qui résiste aux attaque de type man in the middle et même là ... c'est chaud :)

Lien vers le commentaire
Partager sur d’autres sites

Ok, après avoir fouillé un peu partout, la meilleure façon de synchroniser une BDD locale Android avec une BDD distante serait que :

Le serveur distant génère un XML pour que l'appli Android le parse et rentre les infos dans la table.

Mais j'aimerai sécuriser un minimum cela pour que n'importe qui ne puisse pas accéder à mes données.

Avez vous une idée pour qu'Android puisse checker une page demandant au moins un mot de passe ?

En gros que le téléphone soit authentifié avant que le serveur renvoi le fichier xml ?

Pareil pour l'ajout d'une info : une httpRequest sur le serveur distant avec en paramètre les infos à ajouter. Mais pour le sécuriser ? Je peux envoyer dans un des paramètre le mdp chiffré en sha1 ?

Merci pour vos pistes !

Je ne vois aucune impossibilité technique à embarquer le driver JDBC dans ton appli Android.

Il s'agit d'un jar comme un autre après tout.

De là tu auras les mécaniques de sécurité incluses dans toute requete JDBC, notament la gestion user/password.

S'il te semble plus aisé de passer par un accès web, tu peux soit utiliser des requetes HTTPS à ta propre sauce, soit mettre en place un webservice sécurisé lui aussi.

Tu te retrouve dans ce cas avec ta connection base de donnée au niveau de ton serveur HTTP et tout redevient très classique.

Lien vers le commentaire
Partager sur d’autres sites

Moi j'avais pensé mettre en place un script php sur le serveur distant qui en fonction de certains paramètres (dont user/mdp) me renverrait ma bdd distante sous forme d'xml, m'ajouterait un champs dans ma base, m'en supprimerait, etc etc.

Après je suis ouverte à toute autre proposition. Ma seule condition étant que ce ne soit pas accessible à n'importe qui (surtout la suppression d'un champ ...)

Disons que niveau sécurité, je n'ai pas non plus besoin d'un truc hyper blindé. Ce ne sont pas des infos sensible, mais quand même ;)

Selon vous, quel est le meilleur moyen point de vue "facilité de mise en œuvre/niveau de sécurisation" ?

Lien vers le commentaire
Partager sur d’autres sites

avec jdbc tu te connecte de manière classique à la bdd, suivant comment elle est configurée (login et mdp).

Mais faire un webservice comme tu le dis est une bonne solution aussi. Si tu peux faire le travail coté serveur c'est pas plus mal, bien au contraire.

Les 2 ne me paraissent pas très compliqués (enfin je vois pas de grosse contrainte).

Je vote pour le webservice

Lien vers le commentaire
Partager sur d’autres sites

avec jdbc tu te connecte de manière classique à la bdd, suivant comment elle est configurée (login et mdp).

Mais faire un webservice comme tu le dis est une bonne solution aussi. Si tu peux faire le travail coté serveur c'est pas plus mal, bien au contraire.

Les 2 ne me paraissent pas très compliqués (enfin je vois pas de grosse contrainte).

Je vote pour le webservice

si tu n'as pas de gros volumes, le webservice sera très facile à sécuriser : tu le développe avec un systeme de mot de passe, et quand tu le met en prod, tu le met dans ta zone https.

Lien vers le commentaire
Partager sur d’autres sites

En gros je pense que ce titimoby voulait dire c'est que tu mets en place un service HTTPS (HTTP Sécurisé via SSL) et que tu t'authentifies par cette page mais qu'ensuite tu n'es pas forcément obligé de continuer tout en HTTPS (même si c'est "mieux", ainsi quelqu'un qui écoute sur la ligne ne verra rien de ton échange avec le serveur).

Modifié par Androc
Lien vers le commentaire
Partager sur d’autres sites

Les webservices sont pour moi un outil que j'ai un peu oublié, ce qui explique mon manque de clarté. Je m'en excuse.

Androc, a un peu clarifié et je l'en remercie.

En y réfléchissant, je n'ai peut être pas indiqué la piste la plus simple.

En effet, il est possible de développer un webservice "normal" puis de le déployer après dans un container utilisant WS-Security.

Seul l'environnement de déploiement final change.

Ma clarté du jour étant un peu juste, je me permet de t'envoyer sur le site suivant que j'ai trouvé assez clair et concret.

http://jean-noel.vandelanoitte.fr/securiser-un-web-service

La librairie WSS4J sera ton amie me semble t'il.

Lien vers le commentaire
Partager sur d’autres sites

Merci Timimoby pour tes pistes sur les Webservices Java. Mais je pense plutôt le faire en php. Je n'ai pas assez de connaissance en développement Java pour prétendre en faire/implémenter un (quelques contraintes techniques aussi : serveur web mutualisé) ...

Une question pour éclaircir les choses sur les webservices : Peu importe les librairies utilisées coté serveur et coté client tant qu'elles utilisent SOAP pour communiquer ? Peu importe les langages également ? Il faut juste que soit utilisé le protocole SOAP de sorte que la partie client et la partie serveur soient totalement distinctes ?

Si non : Ba j'ai rien compris alors ! :D

Si oui :

- KSOAP m'a l'air d'être pas mal coté client pour Android. J'ai réussi à trouver quelques exemples assez rapidement.

- Ensuite pour le serveur (php obligatoirement), il me faut trouver le bon webservice, je n'ai pas encore fouillé. Je demande l'avis du public ;)

Je sors un peu du sujet d'Android, désolé, mais je pense qu'il est bon pour tous développeurs (moi le premier) souhaitant faire communiquer sont appli avec un serveur de bien éclaircir ces points.

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...