JDBC und Client/Server

Status
Nicht offen für weitere Antworten.

tinker

Mitglied
Guten Tag!
Ich beschäftige mich gerade mit Java-Sicherheit in Bezug auf Datenbanken. Also Sicherheitsmechanismen die Java bietet die für Datenbankzugriffe interessant sind. Zum einen befasse ich mich mit PreparedStatements und StoredProcedures und zum anderen mit der Sicherheit von Netzwerk-Übertragungen. Also JSSE.

Nur lief die Datenbank bei mir bisher immer am selben Rechner wie die Applikation die darauf zugreift. Meine Frage lautet nun, wie ein Client/Server zugriff auf eine Datenbank aussehen würde. Ich nehme mal an es wird eine Client- und eine Serveranwendung geben. Nur weiß ich nicht welche Funktionen welche Anwendung ausführt. Als einfache Anwendung könnte ich mir vorstellen, das der Server alle DB-spezifischen Dinge erledigt und der Client ihm einfach ein Statement zukommen lässt. Der Server greift anschließend auf die DB zu und liefert dem Client ein Java-Objekt oder das ResultSet.

Kann man das so lassen oder gibt es bessere Ansätze?

tia,
tinker
 
G

Guest

Gast
Client <--> Serverschnittstelle |dicke Leitung mit SSL| Facade <--> Bussiness Logik <--> DAO Schicht <--> Datenbank

JDBC hat auf dem Client nichts zu suchen. Auch nicht ResultSets etc. Diese sollten bereits in der DAO Schicht in
entsprechende POJOs konvertiert werden.
 
G

Guest

Gast
1) Serverschnittstelle (Pattern: Client side proxy)

Kapselt den Zugriff auf den Server (stellt dessen Funktionen zur Verfügung) und
übernimmt die Konvertierung von DTOs in VOs und umgekehrt.

2) Facade (Pattern: Facade)

Bietet öffentliche Funktionen des Servers an.

3) Bussiness Logik (Pattern: Bussiness object)

Die serverseitige Logik deiner Anwendung, inklusive Plausibilitätsprüfung, Rechteprüfung etc.

4) DAO Schicht (Pattern: Data access object)

Zugriff auf die Datenbank, Mapping von JDBC nach DTO und umgekehrt
 
G

Guest

Gast
Noch etwas. Alles, was irgendwie nach JDBC aussieht, sollte die DAO Schicht nicht verlassen. Auch keine
SQLExceptions ausserhalb der DAO Schicht. Vorher in eigene Exceptions konvertieren und ohne die
SQLException als Cause werfen. Die SQLExceptions kannst du in der DAO-Schicht loggen.
Damit verbaust du dir nicht die Option, etwas anderes als reines JDBC zu verwenden (z.B. Toplink, Hibernate etc.)
 

tinker

Mitglied
OK, so würde es in der Praxis ausschauen. Da ich mich aber primär mit dem Thema Sicherheit beschäftige ist ein derartiger Aufbau zu Testzwecken womöglich nicht nötig. Ich will einfach, zur praktischen Veranschaulichung, in einem Programm die gesamten, zuvor theoretische behandelten, Sicherheitsmechanissmen einbauen.

Also einfach eine Umgebung wo der Client mit dem Server über eine verschlüsselte Verbindung kommuniziert und der Server dann auf die Datenbank mithilfe von PreparedStatements und StoredProcedures zugreift. Und da hab ich mir halt gedacht, dass der Client einfach einen String mit dem Select-Statement oder Übergabeparametern (für den Fall, das StoredProcedures verwendet werden) an den Server schickt und der die Daten dann aus der Datenbank holt und dem Client, wiederum üder die verschlüsselte Verbindung, ein POJO schickt.

Das ganze wird eine Fachbereichsarbeit für die Schule mit dem Thema "Java-Sicherheit in bezug auf Datenbanken" und was ich jetzt wissen will ist eben ob so ein Aufbau ansatzweise mit der Praxis zu vergleichen ist. Also ob der Client überhaupt ein Select-Statement an den Server schickt, ob es sich dabei dann um einen String handelt usw., oder ob es da etwas anderes gibt. Das ganze sollte eben nicht zu komplex werden, da sich die Arbeit ja um Sicherheit dreht.

Ich hoffe man versteht mein Anliegen

mfg
 
G

Guest

Gast
tinker hat gesagt.:
...was ich jetzt wissen will ist eben ob so ein Aufbau ansatzweise mit der Praxis zu vergleichen ist. Also ob der Client überhaupt ein Select-Statement an den Server schickt, ob es sich dabei dann um einen String handelt usw., oder ob es da etwas anderes gibt. Das ganze sollte eben nicht zu komplex werden, da sich die Arbeit ja um Sicherheit dreht.
Auf keinen Fall. Der Client hat nichts auf der Datenbank zu suchen.

Wenn du paar Beispiele zu JSSE suchst, schau dir die hier an: http://java.sun.com/j2se/1.4.2/docs/guide/security/jsse/samples/
 

tinker

Mitglied
Mit JSSE kenn ich mich eh schon aus. Nur brauch ich jetzt halt noch ein praktisches Beispiel wie ich das jetzt mit einem Datenbankzugriff verbinde.

Anonymous hat gesagt.:
Auf keinen Fall. Der Client hat nichts auf der Datenbank zu suchen.
OK, nur wie sagt der Client dem Server (oder halt der Schicht die für den DB-Zugriff zuständig ist) dann was er braucht? Was schickt er wenn er was aus der DB haben will, was schickt er wenn er was einfügen will, was wenn er was löschen will?

Wie gesagt, bisher hat der Zugriff bei mir immer so ausgeschaut, dass ich an
Code:
DriverManager.getConnection()
als url localhost übergeben hab. Als keine Spur von Client/Server Betrieb...
 
G

Guest

Gast
Du stellst für jede Operation eine ensprechende Funktion serverseitig zur Verfügung.
z.B.
Code:
interface Adressbuch
{
   /**
   * Liest alle Personen des Adressbuchs. 
   *
   * @throws AdressbuchException Fehler beim Lesen.
   */
   List<Person> readAll() throws AdressbuchException;

   /**
   * Liest eine Person anhand der gegebenen Id. 
   *
   * @param personId Id der zu lesenden Person
   * @throws AdressbuchException Fehler beim Lesen
   */
   Person read(Long personId) throws AdressbuchException;

   /**
   * Speichert die gegebene Person. 
   * Ist die gegebene Person nicht im Adressbuch enthalten, wird ein neuer Datensatz angelegt.
   *
   * @param person Zu speichernde Person
   * @return Die gespeicherte Person.
   * @throws AdressbuchException Fehler beim Speichern
   */
   Person save(Person person) throws AdressbuchException;

   /**
   * Löscht die Person mit der gegebenen Id. 
   *
   * @param personId Id der zu löschenden Person
   * @throws AdressbuchException Fehler beim Löschen
   */
   void delete(Long personId) throws AdressbuchException;
}
 

tinker

Mitglied
OK, dann hab ich nen Server der solche Funktionen zur Verfügung stellt. Der Client schickt ihm die Daten (Objekt, ID, ...) über eine sichere Verbindung und der Server gleift dann mit PreparedStatements oder Stored Procedures auf die Datenbank zu. Somit wäre dann alles in einem Beispiel. Right?
 
G

Guest

Gast
Right. ;)

Das hat auch den Vorteil, dass du den Client auch ohne Server entwickeln kannst, wenn du für Testzwecke
einfach nur eine Implementierung der Schnittstelle schreibst, die paar Dummy-Objekte liefert.
z.B.:
Code:
class DummyAdressbuch implements Adressbuch
{
   private List<Person> personList;

   /**
   * Konstruktor. Initialisiert das Dummy-Adressbuch
   */
   public DummyAdressbuch()
   {
      personList = new ArrayList<Person>();
      personList.add(new Person(1, "Bart", "Simpson", ...));
      personList.add(new Person(2, "Homer", "Simpson", ...));
      personList.add(new Person(3, "Lisa", "Simpson", ...));
      ...
   }

   /**
   * Liest alle Personen des Adressbuchs.
   *
   * @throws AdressbuchException Fehler beim Lesen.
   */
   public List<Person> readAll() throws AdressbuchException
   {
      // Kopie, um keine Referenzen an Client zu übergeben
      List<Person> list = new ArrayList<Person>(personList.size());
      for(Person p : personList)
      {
         list.add(new Person(p));
      }
      return list;
   }

   /**
   * Liest eine Person anhand der gegebenen Id.
   *
   * @param personId Id der zu lesenden Person
   * @throws AdressbuchException Fehler beim Lesen
   */
   public Person read(Long personId) throws AdressbuchException
   {
      assert personId != null : "personId must not be null";
      Person person = null;
      for(Person p : personList)
      {
         if(p.getId().equals(personId))
         {
            person = new Person(p); // Kopie, um keine Referenz an Client zu übergeben
            break;
         }
      }
      // Keine Person mit gegebener Id vorhanden, dann Ärger machen
      if(person == null)
      {
         throw new AdressbuchException("Gibesnich");
      }
      return person;
   }

   ... usw.
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Einfache JDBC-Datenbank mit Admin-Client Datenbankprogrammierung 4
B SQLite + jdbc + IntelliJ-Consumer = "No suitable driver found..." Datenbankprogrammierung 15
J PC-Start Problem JDBC Connection Datenbankprogrammierung 10
N JDBC SQLITE und Cascading Datenbankprogrammierung 2
D Asynchrone Aufrufe mit jdbc Datenbankprogrammierung 5
Edin JDBC Hilfe Datenbankprogrammierung 2
H JDBC Tabellen ausgeben Datenbankprogrammierung 8
Husamoli345 JSF-JDBC Verbindung Crud Datenbankprogrammierung 15
G MySQL JDBC Metadaten auslesen aus .accdb -> Primärschlüssel manchmal erkannt manchmal nicht Datenbankprogrammierung 3
N Java, sql, jar, JDBC-Treiber in Classpath Datenbankprogrammierung 8
O Create Table per JDBC Fehler: ORA-00922 Datenbankprogrammierung 4
J JDBC anschaulich präsentieren Datenbankprogrammierung 2
Thallius MySQL JDBC auf Linux Server zu mySQL DB auf anderem Linux Server wirft Access denied Datenbankprogrammierung 5
ralfb1105 Oracle JDBC Debugging Datenbankprogrammierung 8
Z [JDBC][MYSQL] Access denied Datenbankprogrammierung 7
Thallius MySQL jdbc schließt Verbindung nach vielen Request von selber Datenbankprogrammierung 8
B MySQL JDBC Kommentarfilter Datenbankprogrammierung 4
Aruetiise MySQL Name JDBC Drive finden Datenbankprogrammierung 4
E Sqlite-jdbc Mitliefern Datenbankprogrammierung 4
R jdbc-Zugriff Nicht erlaubt ? Datenbankprogrammierung 16
S probleme mit dem jdbc treiber Datenbankprogrammierung 1
Thallius MySQL Merkwürdiges JDBC Verhalten bei VPN Verbindung. Datenbankprogrammierung 7
O JDBC Daten in zwei Tabellen mit zwei foreach-Schleifen einfügen (insert into) Datenbankprogrammierung 1
F MySQL JDBC Problem Datenbankprogrammierung 5
C JDBC und SQLite Datenbank Datenbankprogrammierung 8
looparda SQLite Active JDBC Abstraktion Datenbankprogrammierung 2
J JDBC SQL Statement mit Parameter Datenbankprogrammierung 7
S JDBC PreparedStatement durchiterieren Datenbankprogrammierung 6
J RESTServie + JDBC + No suitable driver found for jdbc Datenbankprogrammierung 4
KaffeeFan JDBC/ODBC-Bridge entfernt Datenbankprogrammierung 4
S sun.jdbc.odbc.JdbcOdbcDriver wird nicht gefunden Datenbankprogrammierung 2
J Fehlende DatenbankView nach einbeziehen von JDBC Datenbankprogrammierung 3
A Mit JDBC auf postgreSQL Datenbank zugreifen Datenbankprogrammierung 5
C PostgreSQL JDBC + PostgreSQL: getLong liefert 0 statt NULL Datenbankprogrammierung 2
flenst111 SQL-Statement Wie konfiguriert man JDBC-Connect.richtig, damit es bei riesigen Tabs keinen Speicherüberlauf gibt? Datenbankprogrammierung 1
M JDBC Tabellen mit Boolean Spalten können nicht erstellt werden. DB Updaten - wie? Datenbankprogrammierung 6
S JDBC mit Postgres DB connecten Datenbankprogrammierung 3
A Eine MySQL Zeile mit JDBC löschen Datenbankprogrammierung 5
D JDBC - Verständnisfrage Datenbankprogrammierung 2
C Tabelle erstellen mit Apache JDBC-Util Datenbankprogrammierung 1
L Conversion-Error bei JDBC Date Literals Datenbankprogrammierung 3
X MySQL DB-verbindung ohne JDBC/ODBC Datenbankprogrammierung 1
F sun.jdbc.odbc.jdbcodbcdriver wird nicht gefuden Datenbankprogrammierung 3
J Keine Verbindung zu MSSQL DB mit JDBC Datenbankprogrammierung 3
U JDBC prepaird Statements Datenbankprogrammierung 4
B MySQL JDBC Zugriff auf entfernt Datenbank, fehlende Rechte Datenbankprogrammierung 2
Q MySQL JDBC-Treiber Problem Datenbankprogrammierung 2
R Transaktionen von mehreren Anwendungen aus - JDBC Datenbankprogrammierung 3
N MySQL com.microsoft.sqlserver.jdbc.SQLServerException: Die Verbindung wurde geschlossen. Datenbankprogrammierung 1
N JDBC: rollback() bei Exception geht nicht!? Datenbankprogrammierung 1
C Dateipfad des jdbc Treibers Datenbankprogrammierung 2
G JDBC Connect nur über SID fehlerfrei möglich Datenbankprogrammierung 2
R Oracle jdbc Zugriff auf Oracle Datenbankprogrammierung 2
T JDBC Fehler Datenbankprogrammierung 2
J JDBC via Singleton Datenbankprogrammierung 12
Z PostgreSQL JDBC mit Postgresql Datenbankprogrammierung 2
B No suitable driver found for jdbc:oracle:thin:@$HOST:$PORT:$SID Datenbankprogrammierung 7
K JDBC via Netzwerk Datenbankprogrammierung 4
B JDBC Connection Fehler Datenbankprogrammierung 8
K JDBC- In Java "stored procedure" erstellen für DB2,OracleSql ... Datenbankprogrammierung 3
J JDBC in Library|"Treiber konnte nicht geladen werden"" Datenbankprogrammierung 2
B JDBC-Connection: Data source name too long Datenbankprogrammierung 3
D JDBC insert mit select abfrage Datenbankprogrammierung 5
A JDBC Prepared Statement Autoincrement Datenbankprogrammierung 3
H JDBC prüfen ob Table existiert Datenbankprogrammierung 3
crashfinger jdbc-connection mit jre7 funktioniert nicht Datenbankprogrammierung 5
0 JDBC Oracle Verbindungsaufbau Datenbankprogrammierung 6
Q Oracle Linux: ClassNotFoundException: oracle.jdbc.driver.OracleDriver Datenbankprogrammierung 6
B JDBC MySQL Statement Datenbankprogrammierung 3
F Oracle Oracle JDBC Anbindung unter Glassfish 3.1.2 Datenbankprogrammierung 3
V PostgreSQL JDBC Treiber fehlt Datenbankprogrammierung 6
Y JDBC - Datenbankabfrage Webserver Datenbankprogrammierung 4
C JDBC Datenbank funktioniert nicht Datenbankprogrammierung 7
C JDBC , JDO oder JPA Datenbankprogrammierung 17
J MySQL Datenbank konfigurieren, JDBC, MySQL oder Hibernate Datenbankprogrammierung 2
P JDBC Verbindung zur DB klappt nicht Datenbankprogrammierung 6
J Java - JDBC Verbindung zur Datenbank nicht möglich Datenbankprogrammierung 10
K JDBC Buch kaufen? Datenbankprogrammierung 3
K Hibernate vs. JDBC Datenbankprogrammierung 4
K JDBC Driver not found Datenbankprogrammierung 10
GianaSisters Per JDBC auf Microsoft SQL 2005 Datenbankprogrammierung 24
S ich brauche tipps für JDBC Datenbankprogrammierung 4
Paristick MSSQL - JDBC Exception beim Registrieren Datenbankprogrammierung 5
S Applet stucks at SQL Connection (jTDS JDBC) Datenbankprogrammierung 15
R MySQL Voraussetzungen für eine erfolgreiche Datenbankanbindung mittels JDBC Datenbankprogrammierung 2
c_sidi90 JDBC Oracle Connection schlägt fehl Datenbankprogrammierung 2
J jdbc-dataSource in Klassen nutzen Datenbankprogrammierung 2
H Rechnen in Datenbanken - JDBC Mittel der Wahl? Datenbankprogrammierung 32
K MySQL JDBC - Access Datenbank - unbekannter TabellenName Datenbankprogrammierung 4
D JDBC Fehler beim laden der nativen Bibliothek db2jcct2 Datenbankprogrammierung 9
J MySQL Verbindung über JDBC scheitert immer Datenbankprogrammierung 2
I Master/Detail Tabellen mit JDBC und Swing Datenbankprogrammierung 10
S MSSQL JDBC "Driver class not found" Datenbankprogrammierung 9
E Datenbankverbindung mit Oracle JDBC und Eclipse Plugin Quantum db Datenbankprogrammierung 2
ruutaiokwu jdbc connection als singleton Datenbankprogrammierung 11
J MySQL Löschen von Rows mit JDBC Datenbankprogrammierung 9
G JDBC Exception Datenbankprogrammierung 3
Screen Ich suche eine SQLDatenbank ohne JDBC-Treiber Datenbankprogrammierung 12
F Fehlerhandling bei JDBC Datenbankprogrammierung 9
T JDBC und Arrays Datenbankprogrammierung 7

Ähnliche Java Themen

Neue Themen


Oben