Guten Morgen Linux-Freunde
erst einmal vielen Dank an Reiner für die Infos zu den Internet-Cafes. Das wwweb.stuebchen im Pentacon kannte ich schon, da ich bei den letzten LUG-Treffen mit dabei war. Leider sieht es im Pentacon in Bezug auf Essen nicht besonders gut aus, ansonsten ist es dort ja wirklich ok.
Ich werde mir heute mal den Kompass Job-In-Club ansehen, ansonsten bin ich auf weitere Infos angewiesen...
Anderes Thema; ich bin gerade dabei ein wenig mit SQL herumzuspielen. Dabei bin ich auf die Frage gestoßen, ob SQL denn Sprachmittel zur Ver- fügung stellt, mit denen sich einzelne Tabellen für bestimmte User vorrübergehend sperren lassen, etwa um derweilen Änderungen daran vor- zunehmen. Soweit ich bisher mitbekommen habe, ist nach dem Erstellen einer Tabelle nur dem User der Zugriff (sowohl lesend als auch schreibend) erlaubt, der sie erstellt hat. In der Doku zu meinem SQL-System (miniSQL) werden solche Operationen nicht erwähnt, rein logisch betrachtet müsste es aber doch welche geben - oder?
Matthias
Matthias Petermann wrote:
Guten Morgen Linux-Freunde
Guten Morgen,
Anderes Thema; ich bin gerade dabei ein wenig mit SQL herumzuspielen.
Brrr. Ich bin immer froh, wenn ich mit Datenbanken so wenig wie moeglich zu tun bekomme ... (sind doch nur Zahlen und Buchstaben auf 'ner Platte ;) ...)
Dabei bin ich auf die Frage gestoßen, ob SQL denn Sprachmittel zur Ver- fügung stellt, mit denen sich einzelne Tabellen für bestimmte User vorrübergehend sperren lassen, etwa um derweilen Änderungen daran vor- zunehmen. Soweit ich bisher mitbekommen habe, ist nach dem Erstellen
Wenn es dir hier um Synchronisationsprobleme geht, so kann ich nur betonen, dass sich darum eigentlich der SQL-Datenbank-Server zu kuemmern hat ...
Grundsaetzlich regelt der alle Anfragen so, dass zwar mehrere User (quasi) gleichzeitig lesen koennen, aber immer nur einer in einer Tabelle schreibt.
Wenn du Aenderungen an Tabellen nicht mit einer SQL-Anweisung hinbekommst, so kannst du mittels Transaktionen aus mehreren Statements ein atomare Aktion machen ... (dann kann sich der Server auch wieder um die Synchronisation kuemmern)
Die Transaction-Befehle sind AFAIK nicht im SQL-Standard festgelegt, aber BEGIN TRANSACTION <name>, ROLLBACK TRANSACTION <name> und COMMIT TRANSACTION <name> sind einen Versuch wert ... (so heissen die bei Sybase)
Ganz wichtig: Transaktionen immer so kurz wie moeglich und so lang wie noetig gestalten ...
einer Tabelle nur dem User der Zugriff (sowohl lesend als auch schreibend) erlaubt, der sie erstellt hat. In der Doku zu meinem SQL-System (miniSQL) werden solche Operationen nicht erwähnt, rein logisch betrachtet müsste es aber doch welche geben - oder?
Wenn es dir darum geht nur bestimmte Nutzer zu sperren (auch wenn mir der Sinn einer nur zeitweisen Sperrung nicht einleuchten will), so musst du zuerst weitere Nutzer anlegen ... Diese Befehle sind allerdings auch nicht standardisiert (da sie sich bei Kenntnis der Master-DB auch mit einfachen SQL-Statements realisieren lassen) ... Bei Sybase ist das sp_adduser oder sp_addlogin (wenn ich mich richtig erinnere) ...
Die Rechte-Vergabe erfolgt dann mit den SQL-Statements GRANT und REVOKE (zuruecknehmen von Rechten) ...
Hoffe, das hat geholfen ...
Bye.
Jens
On Sat, Apr 08, 2000 at 11:25:58AM +0200, Jens Lorenz wrote:
Wenn es dir hier um Synchronisationsprobleme geht, so kann ich nur betonen, dass sich darum eigentlich der SQL-Datenbank-Server zu kuemmern hat ...
Eigentlich macht mir weniger die Synchronisation Probleme (das habe ich vom Server auch erwartet), vielmehr will ich einzelne Tabellen oder Reihen kurzzeitig sperren, um die (unbeabsichtigte) gleichzeitige Bearbeitung durch mehrere Benutzer zu unterdruecken (deshalb auch meine etwas unglueckliche Formulierung, ich wolle zeitweise bestimmte Nutzer sperren).
Die Rechte-Vergabe erfolgt dann mit den SQL-Statements GRANT und REVOKE (zuruecknehmen von Rechten) ...
...genau das ist die Loesung fuer mein Problem. Bei MiniSQL gibts diese Befehle zwar nicht, aber ich habe mir gestern abend mal MySQL angesehen - dort habe ich in der Doku sogar die Befehle zum Sperren der Tabellen (LOCK TABLES, UNLOCK TABLES) gefunden. Ich werd mich gleich mal daran machen, das jetzt alles praktisch auszuprobieren.
Hoffe, das hat geholfen ...
ja, das hat es. Nochmals vielen Dank!
Matthias
Wenn es dir darum geht nur bestimmte Nutzer zu sperren (auch wenn mir der Sinn einer nur zeitweisen Sperrung nicht einleuchten will), so musst du zuerst weitere Nutzer anlegen ... Diese Befehle sind allerdings auch nicht standardisiert (da sie sich bei Kenntnis der Master-DB auch mit einfachen SQL-Statements realisieren lassen) ... Bei Sybase ist das sp_adduser oder sp_addlogin (wenn ich mich richtig erinnere) ...
grrrrr - Zeitweise Sperren sind wichtig für administrative Arbeiten
Die Rechte-Vergabe erfolgt dann mit den SQL-Statements GRANT und REVOKE (zuruecknehmen von Rechten)
mit grant und revoke kann ich nur grundlegende Rechte zuweisen. Unterster Level hat immer leserechte auf alle Tabellen.
CU Thomas
Thomas Dubiel wrote:
Wenn es dir darum geht nur bestimmte Nutzer zu sperren (auch wenn mir der Sinn einer nur zeitweisen Sperrung nicht einleuchten will), so musst du zuerst weitere Nutzer anlegen ... Diese Befehle sind allerdings auch nicht standardisiert (da sie sich bei Kenntnis der Master-DB auch mit einfachen SQL-Statements realisieren lassen) ... Bei Sybase ist das sp_adduser oder sp_addlogin (wenn ich mich richtig erinnere) ...
grrrrr - Zeitweise Sperren sind wichtig für administrative Arbeiten
Huch. Gut und schoen, aber muss man mich deswegen gleich anknurren ??? Ich habe doch gesagt, das ich mit Datenbanken ausser dem allernoetigsten nichts am Hut habe ...
Bye.
Jens
Wenn es dir darum geht nur bestimmte Nutzer zu sperren (auch wenn mir der Sinn einer nur zeitweisen Sperrung nicht einleuchten will),
so musst du
zuerst weitere Nutzer anlegen ... Diese Befehle sind allerdings auch nicht standardisiert (da sie sich bei Kenntnis der Master-DB auch mit einfachen SQL-Statements realisieren lassen) ... Bei Sybase ist das sp_adduser oder sp_addlogin (wenn ich mich richtig erinnere) ...
grrrrr - Zeitweise Sperren sind wichtig für administrative Arbeiten
Huch. Gut und schoen, aber muss man mich deswegen gleich anknurren ??? Ich habe doch gesagt, das ich mit Datenbanken ausser dem allernoetigsten nichts am Hut habe ...
Sorry sollte nicht als knurren rüberkommen
CU Thomas
Matthias Petermann wrote:
Anderes Thema; ich bin gerade dabei ein wenig mit SQL herumzuspielen. Dabei bin ich auf die Frage gestoßen, ob SQL denn Sprachmittel zur Ver- fügung stellt, mit denen sich einzelne Tabellen für bestimmte User vorrübergehend sperren lassen, etwa um derweilen Änderungen daran vor- zunehmen. Soweit ich bisher mitbekommen habe, ist nach dem Erstellen einer Tabelle nur dem User der Zugriff (sowohl lesend als auch schreibend) erlaubt, der sie erstellt hat. In der Doku zu meinem SQL-System (miniSQL) werden solche Operationen nicht erwähnt, rein logisch betrachtet müsste es aber doch welche geben - oder?
MiniSQL setzt für atomare Aktionen (einfaches INSERT, UPDATE) einen WriteLock. Mehr kann es nicht. Falls Du ein System suchst, das auch Transaktionen (Mehrere Statements zusammenfassen) kann, empfehle ich PostgreSQL, daß auch frei ist. (BSD-artige Lizenz)
MiniSQL ist meiner Meinung nach kaum zu gebrauchen, da es keine Userverwaltung und kein brauchbares Rechte-System hat. Wenn man keine Transaktionen braucht, reicht auch MySQL, dort kann man in den Systemtabellen (Datenbank mysql) 'host', 'db' und 'user' ziemlich gute Rechtevergaben realisieren.
Jan Dittberner
Jan Dittberner schrieb:
MiniSQL ist meiner Meinung nach kaum zu gebrauchen, da es keine Userverwaltung und kein brauchbares Rechte-System hat. Wenn man keine Transaktionen braucht, reicht auch MySQL, dort kann man in den Systemtabellen (Datenbank mysql) 'host', 'db' und 'user' ziemlich gute Rechtevergaben realisieren.
Leider braucht mysql nach den Aenderungen ein reload, damit die Aenderungen wirksam werden. :-(
Rico
Hallo Matthias,
Anderes Thema; ich bin gerade dabei ein wenig mit SQL herumzuspielen. Dabei bin ich auf die Frage gestoßen, ob SQL denn Sprachmittel zur Ver- fügung stellt, mit denen sich einzelne Tabellen für bestimmte User vorrübergehend sperren lassen, etwa um derweilen Änderungen daran vor- zunehmen.
Ich arbeite sehr intensiv mit Informix Online - 7.3x. Es könnte sein, daß einige Begriffe bei anderen Datenbanken anders lauten. Aber vielleicht hilft es dir weiter. Ich weiß zwar nicht, welche Datenbank du hast, aber es gibt die Möglichkeit Datenbanken, Tabellen, Zeilen, Felder oder Schlüssel in verschiedenen Isolationslevel zu versetzen. niedrigste - dirty read es kann alles gelesen, jedoch nichts geschrieben werden committed read Prozeß darf keine unbestätigten Daten lesen (wenn gerade geändert wird) curso stability nur für Programmierung wichtig höchste - repeatable read andere Prozesse dürfen die erst weiterlesen wenn andere Sperren (egal welche) entfernt wurden. (ist die schärfste Sperre)
Um eine Tabelle einer Datenbank zu sperren sollte eigentlich
loch table <tabellenname> in shared mode (dirty read)
ausreichen um anderen Nutzern das lesen der Daten zu erlauben, Änderungen aber zu unterbinden. Wenn das nicht ausreicht sagst du einfach
lock table <tabellenname> in exclusive mod (repeatable read)
dann haben alle anderen Nutzer auser dem, der das Statement absetzt keine Möglichkeit auf die Daten zuzugreifen. Um alles wieder rückgängig zu machen reicht
unlock table <tabellenname>
Gleichzeitig kann auch noch der Sperrmodus gesetzt werden, was bedeutet, wie sollen die anderen Nutzer reagieren, wenn Sie auf ne Sperre stoßen.
set lock mode to wait : wartet bis die Sperre weg ist (was Stunden dauern kann) set lock mode to not wait : Nutzer bekommt Meldung daß Datensatz gesperrt und fliegt raus set lock mode to wait 20 : wartet 20 Sekunden auf die Aufhebung der Sperre und fliegt dann mit Fehler raus
Wie gesagt alles unter Informix - aber da das alles dem ANSI entsprechen sollte .... probiers einfach aus
Soweit ich bisher mitbekommen habe, ist nach dem Erstellen einer Tabelle nur dem User der Zugriff (sowohl lesend als auch schreibend) erlaubt, der sie erstellt hat. In der Doku zu meinem
SQL-System
(miniSQL) werden solche Operationen nicht erwähnt, rein logisch betrachtet
müsste
es aber doch welche geben - oder?
Es kommt darauf an, wie die Nutzungsrechte in deiner Umgebung gesetzt sind. M.M. nach hat jeder Nutzer sofort das Recht eine Tabelle zu lesen, wenn sie halt existiert und nichts anderes vereinbart wurde (siehe Isolationslevel). Anders sieht es bei Temporären TAbellen aus. Diese sind nur für den Nutzer und die betreffende Session bestimmt. Es kann kein anderer Prozeß oder Nutzer diese lesen, bearbeiten oder löschen. Endet die Session stirbt die Tabelle.
Ich hoffe ich konnte dir weiterhelfen
Viel Erfolg beim Probieren
Thomas
lug-dd@mailman.schlittermann.de