Theoriefrage : Programm-zugriffsrechte auf Netzlaufwerk

Status
Nicht offen für weitere Antworten.

Tallan

Bekanntes Mitglied
Hallo zusammen,
ich grüble grade über folgendem Problem.

Ich will ein Programm schreiben an dem sich mehrere User mit verschiedenen Berechtigungen anmelden können. Dieses Programm läuft auf einem Clientrechner und ist mit einer SQL - DB verbunden welche u.a Links auf Dateien in einem Netzlaufwerk (in diesem Fall wird Samba genutzt ) liegt.

Der User kann nun je nach berechtigung Dateien auf dem Netzlaufwerk öffnen.

Meine frage ist nun wie kann ich dem Programm selbst rechte an dem Netzlaufwerk geben die der User selbst aber nicht hat.


Beispiel :

Auf dem Server läuft MySql in der Tabelle stehen 2 links, auf a.pdf und b.pdf
Die beiden Dateien befinden sich im selben Ordner.
User1 soll a lesen können aber nicht b
User2 soll b lesen können aber nicht a

Auf Clientseite läuft eine Javaanwendung die es ermöglicht die pdf dateien zu öffnen.

User1 logt sich ein, bekommt nur den link auf a.pdf
User2 logt sich ein und bekommt nur den link auf b.pdf

Problem :
Wie realisiere ich den Zugriff auf das Netzlaufwerk so, das es User1 nicht möglich ist b.pdf zu lesen.
 

sparrow

Top Contributor
Über Dateirechte würde ich das gar nicht machen. Sprich: die Benutzer haben über das Dateisystem gar keinen Zugriff auf die Daten.
Entweder speicherst du die Dateien mit in der Datenbank (IMHO der einzig gute Grund Binärdaten in einer Datenbank zu speichern sind die Zugriffsrechte) oder baust eine Applikation die die Dateien an deinen Client ausliefern kann.
In beiden Fällen speicherst du die Zugriffsrechete in der Datenbank.
 

Tallan

Bekanntes Mitglied
Über Dateirechte würde ich das gar nicht machen. Sprich: die Benutzer haben über das Dateisystem gar keinen Zugriff auf die Daten.
Entweder speicherst du die Dateien mit in der Datenbank (IMHO der einzig gute Grund Binärdaten in einer Datenbank zu speichern sind die Zugriffsrechte) oder baust eine Applikation die die Dateien an deinen Client ausliefern kann.
In beiden Fällen speicherst du die Zugriffsrechete in der Datenbank.


die idee die pdf datei in die datenbank zu schreiben ist denke ich ganz gut, kennst du ein tutorial das beschreibt wie man sie reinschreibt und später wieder ausließt/öffnet ?
ich konnte bis jetzt dazu noch nichts finden
 

Tallan

Bekanntes Mitglied

Klasse danke, ich hab demzufolge jetzt in einem kleinen testprogramm eine pdf datei in die datenbank geschrieben das scheint soweit auch zu klappen.
Jetzt habe ich aber ein problem beim wiederherstellen bzw öffnen in einem PDF Reader.

Generell nutze ich dafür
Java:
	 public static void openPDF(String adr) throws IOException
	 {
		    Desktop
                         .getDesktop()
                         .open( new File(adr));
	 }

Zum auslesen habe ich bis jetzt folgendes gemacht

Java:
		dbc = dbc.getInstance(); // DB 
		java.sql.PreparedStatement st = dbc.cn.prepareStatement("SELECT * FROM attachment");
		ResultSet rs = st.executeQuery();
		rs.next();

                //rs ist nun die erste Zeile der mysql Tabelle

Meine Frage / Problem jetzt, wie öffne ich die Daten der DB im PDF Reader?

Datenbank ist zu testzwecken folgendermaßen aufgebaut
Name der Datei | Longblobdaten | application
test.pdf | longblob.. | application/pdf
 

sparrow

Top Contributor
Indem du die Datei erstmal auf der Festplatte speicherst und anschließend wieder löschst. Das Problem ist es den PDF-Reader etwas lesen zu lassen. Der kann das sicher nur aus einer Datei.

Aber: Es gibt auch Bibliotheken für Java die dir eine PDF darstellen können. Dann könnte deine Applikation selbst die PDF darstellen und uU direkt mit dem Obejekt gefüttert werden.
 

Tallan

Bekanntes Mitglied
Indem du die Datei erstmal auf der Festplatte speicherst und anschließend wieder löschst. Das Problem ist es den PDF-Reader etwas lesen zu lassen. Der kann das sicher nur aus einer Datei.

Aber: Es gibt auch Bibliotheken für Java die dir eine PDF darstellen können. Dann könnte deine Applikation selbst die PDF darstellen und uU direkt mit dem Obejekt gefüttert werden.

die möglichkeiten habe ich beide schon in betracht gezogen, momentan hängt es aber daran wie ich die pdf erstellen kann.

Ich vermute mal das ich die entsprechenden Daten aus der DB auslesen muß und dann per FileOutputStream in eine Datei schreibe ?
Falls du da ein beispiel zur hand hättest wäre ich happy, da ich nicht weiß wie ich die daten im longbob format als datei schreiben soll.


mein ansatz war


Java:
		dbc = dbc.getInstance();
		java.sql.PreparedStatement st = dbc.cn.prepareStatement("SELECT * FROM attachment");
		ResultSet rs = st.executeQuery();
		rs.next();
		//System.out.println(rs.getObject("c"));
	    FileOutputStream fos = new FileOutputStream("Z://demo.pdf");
	    ByteArrayInputStream in = (ByteArrayInputStream) rs.getBinaryStream("c");
	    byte nextByte;
	    while ( ( nextByte = (byte) in.read() ) != -1  ){
	    	fos.write(nextByte);
	    }

was leider nur eine nicht lesbare pdf datei erzeugt
 
Zuletzt bearbeitet:

sparrow

Top Contributor
In dem Thread den ich verlinkt habe wird erklärt wir man das Speichern in der DB und holen der Daten aus der DB am Besten mit einem Prepared Statement löst.
Da bekommt man dann ein Obejct zurück und kann das dann in das casten was es vorher war. In deinem Fall ein File-Object oder byte-Array.
 

Tallan

Bekanntes Mitglied
Casten geht leider nicht
Java:
		dbc = dbc.getInstance();
		java.sql.PreparedStatement st = dbc.cn.prepareStatement("SELECT * FROM attachment");
		ResultSet rs = st.executeQuery();
		rs.next();
		Object object = rs.getObject("c"); // ist das feld mit den longbob daten
		File f = (File)object;

Exception in thread "main" java.lang.ClassCastException: [B cannot be cast to java.io.File
at tests.dbtest.<init>(dbtest.java:55) // ist der Cast
at tests.dbtest.main(dbtest.java:78)


mein Problem ist also nachwievor das ich nicht weiß wie ich die File erzeugen / erhalten / umwandeln / casten soll.

Vielen dank im übrigen für die viele Mühe!
 

Tallan

Bekanntes Mitglied
Java:
java.sql.PreparedStatement pst = dbc.cn.prepareStatement("INSERT INTO attachment (a, b, c, d) VALUES ( ?, ?, ?, ?)");
		File file = new File("Z:\\test2.pdf");
		pst.setInt(1, 2);
		pst.setString(2, file.getName());
		pst.setBinaryStream(3, new FileInputStream(file), (int)file.length());
		pst.setString(4, "application/pdf");
		pst.execute();
 

sparrow

Top Contributor
Ok, du schreibst als mit BinararyStreams. In dem anderen Thread hat genau das nicht geklappt. Ich persönlich bin so auch noch nicht vor gegangen sondern habe immer ein Objekt abgelegt (siehe meine Posts in dem verlinkten Thread).
Was bei dir gehen sollte ist da holen des Inhalts mit getBinaryStream beim auslesen (statt getObject)
 

Tallan

Bekanntes Mitglied
also mit setObject steht in der db bei einer filegröße von 140kb nur 80b

pst.setObject(3, (Object)file);

alternativ
pst.setObject(3, file);


und per

File f = (File) rs.getObject("c");

kommt die selbe exception..

per getObject selbiger fehler :(
 

sparrow

Top Contributor
Sorry, mein Fehler.
Mit setObject kannst du natürlich ein Object ablegen das serialisierbar ist. Allerdings ist File qusi nur ein Verweis auf die Datei, der eigentliche Inhalt der Datei ist darin nicht gespeichert.

Du müsstest, wenn du das mit einem Object machen willst, also erst den Inhalt irgendwie in ein Object bringen.
 

Tallan

Bekanntes Mitglied
damit gehts

Java:
		///rauslesen
		dbc = dbc.getInstance();
		java.sql.PreparedStatement st = dbc.cn.prepareStatement("SELECT * FROM attachment");
		ResultSet rs = st.executeQuery();
		rs.next();

	    FileOutputStream fos = new FileOutputStream("Z://demo3.pdf");
	    ByteArrayInputStream in = (ByteArrayInputStream) rs.getBinaryStream("c");
	    int nextByte;
	    
	    while ( ( nextByte =  in.read() ) != -1  ){
	    	fos.write(nextByte);
	    
	    }

es ist nur brechend langsam ich hoffe wenn ich noch einen buffer hinzufüge geht es etwas fixer.

und hier noch die schnelle varaiante

Java:
		dbc = dbc.getInstance();
		java.sql.PreparedStatement st = dbc.cn.prepareStatement("SELECT * FROM attachment");
		ResultSet rs = st.executeQuery();
		rs.next();

	    FileOutputStream fos = new FileOutputStream("Z://demo7.pdf");
	    ByteArrayInputStream in = (ByteArrayInputStream)rs.getBinaryStream("c");
	    fos.write(rs.getBytes("c"));

danke für die hilfe @ sparrow
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Erstelltes Programm über Internet Browser ausführen Netzwerkprogrammierung 26
I Socket Das erste Server-Client Programm Netzwerkprogrammierung 16
Aruetiise Socket Java Programm auf Server Netzwerkprogrammierung 3
G Programm unter anderer IP ausführen Netzwerkprogrammierung 6
T Socket Java Programm hängt sich auf bei dem versuch von einem Socket scanner Daten zu erhalten. Netzwerkprogrammierung 1
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
A Classpath Tomcat, Start von Programm aus Tomcat Container Netzwerkprogrammierung 1
M Java-Programm aus dem Web laden Netzwerkprogrammierung 3
E Eingabe (auf Internetseite) durch ein Programm machen lassen Netzwerkprogrammierung 19
T UDP Pakete empfangen ohne Programm zu blockieren Netzwerkprogrammierung 3
S HTTP Servlet als Instanzen im Programm starten Netzwerkprogrammierung 3
M Paktete abfangen und zu eigenem Programm umleiten - wie? Netzwerkprogrammierung 5
C Programm per Hompage ansprechen Netzwerkprogrammierung 4
T Download Programm - Download endet vorzeitig (bricht ab) Netzwerkprogrammierung 11
K Programm als Webservice laufen lassen Netzwerkprogrammierung 5
G ObjectInputStream hängt ganzes Programm auf... Netzwerkprogrammierung 7
C Vom Server Programm auf Client starten Netzwerkprogrammierung 2
J net send Popups abfangen und in eigenem Programm ausgeben. Netzwerkprogrammierung 12
M Befehle an externes Java-Programm senden Netzwerkprogrammierung 8
D client programm, passwortverschlüsselung Netzwerkprogrammierung 16
S HTTP Kleines Programm für den Routerneustart Netzwerkprogrammierung 3
M Java-Programm als Webserver erzeugt HTML Netzwerkprogrammierung 8
J Framework/ Muster für Chat-ähnliches Programm gesucht Netzwerkprogrammierung 2
N Datenaustausch zwischen Java-GUI und PHP-Programm über SOAP Netzwerkprogrammierung 19
1 Kommunikation mit externem Programm über TCP Netzwerkprogrammierung 2
B Server-Programm wird durch "read" beendet Netzwerkprogrammierung 8
P Wie gibt man einem GUI Programm ein Web interface? Netzwerkprogrammierung 5
A Programm umschreiben von Pipes auf Sockets Netzwerkprogrammierung 12
P Java Programm als Dienst auf Server Netzwerkprogrammierung 11
J Mit Java Anwendung ein (externes) Programm auf einem AIX Rechner starten Netzwerkprogrammierung 6
S Commons Net 2.0 und FTP in meinem Programm Netzwerkprogrammierung 4
lordcarlos Erstes TCP programm - output stream problem Netzwerkprogrammierung 2
A Probleme mit kleinem Netzwerk Programm Netzwerkprogrammierung 30
L RMI Programm beendet ohne Fehler sofort nach Start (Windows 2000) Netzwerkprogrammierung 7
L SSL Verbindung aber Server wird erst im Programm festgelegt Netzwerkprogrammierung 4
J programm zum autom. ausdruck einer webseite Netzwerkprogrammierung 2
A Probleme mit kleinem Messenger-Programm Netzwerkprogrammierung 4
L Programm in der RMIRegistry anmelden und benutzen (RMI) Netzwerkprogrammierung 4
H Webserver mit PHP als Java-Programm, gibt es schon so etwas? Netzwerkprogrammierung 12
A Java-Programm auf einem Server laufen lassen Netzwerkprogrammierung 9
F Chat Programm. Verständnisfrage while-Schleife Netzwerkprogrammierung 7
P Probleme bei Chat programm Netzwerkprogrammierung 2
M Log In Programm für Seiten Netzwerkprogrammierung 2
A download programm Netzwerkprogrammierung 2
G Einfaches Client-Server Programm (verbindungslos) Netzwerkprogrammierung 2
L RMI-Programm ausführen Netzwerkprogrammierung 6
J Java Programm für Upload von Dateien per HTTP Netzwerkprogrammierung 7
J Server soll Zugriff auf Java Programm ermöglichen Netzwerkprogrammierung 3
A JSP->Servlet->Programm (Ausführung) -> Servlet -&gt Netzwerkprogrammierung 2
L einfaches Programm zum herunterladen von Bildern Netzwerkprogrammierung 2
V probleme mit dem chat programm Netzwerkprogrammierung 4
N Hexcode an ein Programm senden. Netzwerkprogrammierung 4
R Mein FileTransfer Programm Netzwerkprogrammierung 12
T Kann man jeden Port für Programm verwenden? Netzwerkprogrammierung 2
B Wie Router einstellen für CLient-Server-Programm? Netzwerkprogrammierung 4
B Client-Server-Programm! Netzwerkprogrammierung 9
S P2P Programm Netzwerkprogrammierung 2
H E-Mail Programm Netzwerkprogrammierung 3
G Chat Programm - was ist los? Netzwerkprogrammierung 9

Ähnliche Java Themen

Neue Themen


Oben