PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak mogę bezpiecznie (pośrednio) przeszukiwać bazę danych postgresql w systemie Android?

Szybka wersja:

Użyj warstwy pośredniej usługi sieciowej działającej na hoście publicznym, który kontrolujesz (prawdopodobnie, ale niekoniecznie na hoście bazy danych). Ujawnij metody publicznych usług internetowych, aby wykonać ograniczoną pracę, na którą chcesz zezwolić, i nic więcej.

Powiązane pytania:

Opcje implementacji

Osobiście używałbym serwera aplikacji Java, takiego jak Apache Tomcat lub JBoss AS 7 i pisałbym moje metody usług internetowych przy użyciu JAX-RS stworzyć ładny interfejs API w stylu REST dla mojej aplikacji. To jest to, co znam i działa dobrze, ale masz wiele opcji, w tym implementacje:

  • Interfejsy API podobne do REST (Java JAX-RS impls Jersey i RESTEasy, różne inne narzędzia langs), które używają żądań HTTP i generują odpowiedzi JSON lub XML.

  • SOAP z WSDL, klasyczną warstwą „usług internetowych”. W Javie zrobione z JAX-WS między innymi. Większość języków ma narzędzia do SOAP + WSDL, ale praca z nimi jest trochę kiepska, zwłaszcza na urządzeniach z przerwami, takich jak telefony komórkowe.

  • XML-RPC, jeśli lubisz ból

Istnieje kilka szybkich startów JAX-RS w krótkim wprowadzeniu JBoss AS 7 lista; po prostu wyszukaj „JAX-RS”. „K /a> " Szybki start jest przydatny, choć może nie jest idealny, jeśli nie znasz podstaw JBoss AS 7 i Jave EE 6. Jeśli chodzi o specyfikę JAX-RS, lepiej będzie, jeśli skorzystasz z samouczka Jersey lub RESTEasy, takiego jak to lub to .

Ważne uwagi

Jeśli to możliwe, użyj protokołu HTTPs, a jeśli dostęp nie ma być publiczny, użyj odpowiedniego schematu uwierzytelniania HTTP, takiego jak HTTP Basic auth przez HTTPs. Każda przyzwoita implementacja usług internetowych będzie oferować opcje uwierzytelniania lub obsługiwać te z platformy, na której działa. Unikaj pokusy wdrożenia własnego uwierzytelniania i zarządzania użytkownikami w warstwie usług internetowych, będziesz Pieprzyć to; użyj uwierzytelniania w warstwie HTTP, która została już napisana i przetestowana. Może to wymagać użycia czegoś takiego jak mod_auth_pgsql Apache , obszary bezpieczeństwa JDBC JBoss AS 7 itp. Jedynym przypadkiem, w którym brałbym pod uwagę niewłaściwą autoryzację HTTP na użytkownika, jest sytuacja, w której nie muszę rozdzielać moich użytkowników ze względów bezpieczeństwa, obchodzi mnie tylko, że to moja aplikacja uzyskuje dostęp do serwera , tj. jeśli moje wymagania dotyczące bezpieczeństwa są dość słabe. W tym przypadku użyłbym stałej nazwy użytkownika/hasła dla całej aplikacji i prawdopodobnie certyfikatu klienta X.509, jeśli Android je obsługuje.

Pamiętaj, że bez względu na to, jak zabezpieczysz rzeczy, wszystkie dane uwierzytelniające są albo znane użytkownikowi, albo mogą zostać pobrane w trywialny sposób z pliku .apk, więc nadal musisz zakładać, że każdy, a nie tylko aplikacja, może uzyskać dostęp do Twoich metod usług internetowych. Napisz je odpowiednio.

Nie po prostu wyślij SQL z aplikacji przez wywołanie usługi sieciowej do serwera i zwróć wyniki w formacie JSON. Jest to przerażająco niepewne, a także brzydkie i niezgrabne. Napisz metodę usługi sieci Web dla każdego zadania, które aplikacja ma wykonywać i przechowywać na serwerze. Pamiętaj, aby używać zapytań parametrycznych i uważaj na inne zagrożenia związane z iniekcją SQL. Te metody usług internetowych mogą używać jednego lub więcej zapytań do wygenerowania pojedynczej odpowiedzi — na przykład możesz zebrać rekord „Klient” i wszystkie powiązane rekordy „Adres” i „Kontakt”, a następnie zwrócić wynik w postaci ładnego obiektu JSON urządzenia z systemem Android może zużywać, oszczędzając wiele powolnych i zawodnych podróży w obie strony.

Bez względu na to, czego używasz, pamiętaj, aby wywołać usługi sieciowe w wątku roboczym w tle i nie blokować interfejsu użytkownika. Przygotuj się na przekroczenia limitów czasu i błędy oraz na potrzebę ponawiania prób. Przetestuj swoją aplikację, symulując przerywaną utratę połączenia, duże opóźnienia i wysokie współczynniki utraty pakietów, i upewnij się, że nadal można z niej korzystać.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zagraj w 2.2 z Hibernate JPA i Postgres

  2. PostgreSQL:jak zaktualizować wiersze w CTE

  3. Czy istnieje sposób na rzucenie typu danych postgresql 9.3, aby mógł wpływać tylko na jedną stronę?

  4. Jak zaktualizować kolumnę tabeli Postgres za pomocą ramki danych pandas?

  5. Wyodrębnić sekundy z tabeli interwałów / Przesłać rekord do interwału?