This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information

Potenzieller Fehler: setAutoLinkReference bei MySQL-Views

Allgemeine Fragen zur Entwicklung von und mit JVx.

Potenzieller Fehler: setAutoLinkReference bei MySQL-Views

Postby Mihail121 » Sun Jan 29, 2012 7:48 pm

Hallo wieder JVx-Team,

Ich baue meine Applikation weiter und habe mich nun entschlossen, ähnlich wie bei der Packung-Applikation, bei der User-Administration nicht die Users-Tabelle anzufordern, da diese auch die Passworter enthält. Stattdessen defeinere ich eine View folgendermaßen (meine DB-Technologie ist nachwievor SQL, aber ich bereue es langsam):

Code: Select all
CREATE VIEW ViewUsers AS SELECT
    id,                                 // Primary key in Users
    username,
    change_password,
    active,
    first_name,
    last_name,
    email, phone,
    role_id,                            // Foreign key in Users
    company_id                          // Foreign key in Users
FROM Users;


Die Storage-Initialisierung sieht dann so aus:

Code: Select all
public DBStorage getUsers() throws Exception {
   DBStorage dbsUsers = (DBStorage) get("users");
   if (dbsUsers == null) {
      dbsUsers = new DBStorage();
      dbsUsers.setDBAccess(getDBAccess());
      // For secutity reasons work with the view
      //
      dbsUsers.setFromClause("ViewUsers");
      dbsUsers.setWritebackTable("Users");
      dbsUsers.setAutoLinkReference(true);
      dbsUsers.open();
         put("users", dbsUsers);
   }
   return dbsUsers;
}



Nun kriege ich Exceptions wie "Column USER_NAME" nicht definiert. Ist zwar in der Tat so, aber würde ich direkt mti der Tabelle "Users" kommunizieren gibt es keine Exceptions. Der Aufruf von getSubStorage liefert auch nichts. Warum kommt es also zu Problemen, wenn ich mit einer View arbeite? Lohnt sich überhaupt, die Passwörter so zu verstecken?

Vielen Dank für Ihre Zeit und Mühe!
Mihail121
 
Posts: 7
Joined: Tue Nov 22, 2011 8:12 pm

Re: Potenzieller Fehler: setAutoLinkReference bei MySQL-View

Postby rjahn » Sun Jan 29, 2012 9:08 pm

Die Exception sollte, wie hier beschrieben, nur eine Debug Meldung sein, weil die View diese Spalte nicht liefert und somit kein Link Cell Editor gesetzt werden kann. Liefert die View diese Spalte, sollte die Log Meldung nicht zu sehen sein!

Für Passwörter bestehen mehrere Möglichkeiten. Sie könnten z.B. in der DB die Passwörter verschlüsseln - würden wir empfehlen. JVx ermöglicht das durch den SecurityManager Mechanismus. Der DBSecurityManager enthält eine vollständige Implementierung.

In der Konfiguration ist z.B.: diese Definition möglich:

Code: Select all
<securitymanager>
  <class>com.sibvisions.rad.server.security.DBSecurityManager</class>
  <passwordalgorithm>SHA</passwordalgorithm>
</securitymanager>

Wenn Sie einen eigenen SecurityManager implementiert haben, können Sie diesen von AbstractSecurityManager ableiten und die vorhandenen Methoden nutzen.

Wenn Sie in Ihrer Applikation die Users Tabelle editieren, sollten natürlich auch die eingegebenen Passwörter wieder verschlüsselt werden, da hier nicht der SecurityManager das Passwort ändert. Ein Beispiel finden Sie hier. Wenn Sie das Passwort in der MasterConnection ändern, wird die Änderung durch den SecurityManager durchgeführt!

Die Sub Storages sind natürlich nur befüllt, wenn auch welche erkannt und auf Columns gesetzt wurden.
rjahn
 
Posts: 41
Joined: Sun Sep 13, 2009 1:54 pm

Re: Potenzieller Fehler: setAutoLinkReference bei MySQL-View

Postby rjahn » Sun Jan 29, 2012 9:16 pm

MySql ist grundsätzlich schon in Ordnung und keine schlechte Wahl.

Diese Verwendung wäre zu bevorzugen:

Code: Select all
...

dbsUsers = getDBAccess().createStorage();
dbsUsers.setFromClause("ViewUsers");

...

Dadurch erhalten Sie ev. eine spezifische Storage für Ihre DB, um spezielle Features zu unterstützen.


Wenn Sie mit Views arbeiten, dann sollte wie folgt vorgegangen werden:
Die View liefert alle Eingabe und Anzeige relevanten Informationen. Zu einer ID also auch die Detail Infos wie Bezeichner usw.

Für die speziell "gejointen" Columns können Sie dann Serverseitig oder am Client die Auswahllisten "manuell" definieren.

Im Prinzip programmieren Sie den Mechanismus für automatische Auswahllisten selbst aus.

Ihre View könnte also noch verbessert werden, da Sie am GUI sonst nicht die Rolle und Company Bezeichner sehen. Sie sollten also die Roles und Company Tabellen joinen und die Bezeichner anzeigen.
rjahn
 
Posts: 41
Joined: Sun Sep 13, 2009 1:54 pm

Re: Potenzieller Fehler: setAutoLinkReference bei MySQL-View

Postby Mihail121 » Sun Jan 29, 2012 9:31 pm

Vielen Dank für die Antwort! Ich verstehe zwar, dass die View die Spalte nicht liefert. Meine Tabelle lieferte die auch nicht, aber ich bekam die dann automatisch. Passiert dies bei Views nicht automatisch?
Mihail121
 
Posts: 7
Joined: Tue Nov 22, 2011 8:12 pm

Re: Potenzieller Fehler: setAutoLinkReference bei MySQL-View

Postby rjahn » Mon Jan 30, 2012 2:03 am

Wenn die Writeback Table definiert wurde, wird anhand dieser ein SQL Statement definiert, inkl. Joins. Darum gibt es dann auch die Spalten für die Auswahllisten, die aber in der Tabelle nur als ID zu finden sind.

Wird nun eine From clause definiert, dann kann kein automatisches Statement verwendet werden. Daher funktionieren die automatischen Auswahllisten nur mit Writeback Table ohne From clause.

Die automatischen Auswahllisten sind ein "Vorschlag" von JVx, sprich ein Automatismus, der aber jederzeit deaktiviert werden kann.

Das momentane Problem würde gelöst sein, wenn JVx einen feineren Eingriff in den Mechanismus erlauben würde, wie hier beschrieben.
rjahn
 
Posts: 41
Joined: Sun Sep 13, 2009 1:54 pm


Return to Development (DE)