Jump to content
TeChn4K

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

Share this post


Link to post
Share on other sites

Il faudrait plus de détails : quel est le type de BDD ? tu veux te connecter directement dessus ? Par le biais d'une interface web ?

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

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 !

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

en local c'est SQLite, pas MySQL.

Par contre tu peux surement implémenter un jar jdbc pour interroger la BDD MySQL

Share this post


Link to post
Share on other sites
en local c'est SQLite, pas MySQL.

Oui je sais mais comme il n'était pas clair je me suis demandé si le DatabaseHelper dont il se sert n'était pas multi bdd et donc que son test sur un téléphone n'aurait pas été concluant.

Share this post


Link to post
Share on other sites

Pour commencer tes tests un peu plus proche de la réalité tu devrais t'installer un MySQL sur ta machine.

Déjà si tu arrives à interroger une base, même bidon, tu auras déjà un peu progressé car tu tiendras l'outil qu'il te faut.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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 ?

Share this post


Link to post
Share on other 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,mais apres faut parser,mais jpense pas que sa soit trop dur

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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 !

Edited by TeChn4K

Share this post


Link to post
Share on other 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 :)

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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" ?

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites
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.

Tu pourrais expliciter un peu plus ?

Share this post


Link to post
Share on other 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).

Edited by Androc

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

sinon tu le fais en REST, c'est le plus simple coté client peut-être.

Parser du xml c'est intégré dans l'API Android

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.






×
×
  • Create New...