Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

TEMPORARY-Tabelle und Berechtigungen

Hallo Leute!

Wie schaffe ich es, daß ein Benutzer auf eine von ihm erstellte TEMPORARY-Tabelle zugreifen kann, ohne daß er gleich alles lesen kann oder ich einen Riesenaufwand betreiben muß?

Folgendes Szenario: Der Benutzer erstellt die Tabelle:
CREATE TEMPORARY TABLE `foo`.`bar` ...

Er hat als einzige Berechtigung CREATE TEMPORARY TABLES auf `foo`.* und somit funktioniert das.
Es schlägt jedoch jedes SELECT auf die Tabelle fehl, aufgrund fehlender Berechtigungen.

Bislang habe ich zwei mögliche Lösungen:
1. GRANT SELECT ON `foo`.* - funktioniert, aber dann darf er auch überall lesen. Schlecht!

2. Ich erstelle eine Dummy-Tabelle `foo`.`bar` und gebe SELECT-Rechte darauf. Die temporäre Tabelle "überlagert" dann die statische Dummy-Tabelle und erbt aber deren Berechtigungen. Das scheint daher wie gewünscht zu klappen, allerdings muß ich dann den Namen sämtlicher temporären Tabelle im Voraus wissen und diese manuell anlegen. Auch nicht gerade schön, aber damit könnte ich vorerst leben.

Weiß jemand eine elegantere Lösung?

Hier gehts zum Orginal Eintrag "TEMPORARY-Tabelle und Berechtigungen" im Forum

Antworten

nur ne frage: warum TEMPORARY-Tabelle ?


2.

Zitat:
fuckregistrierung postete
nur ne frage: warum TEMPORARY-Tabelle ?
Weil TEMPORARY-Tabellen nur in der aktuellen Sitzung sichtbar sind und sich nicht gegenseitig beeinflussen, also jede Instanz sieht - auch bei identischem Namen - nur die eigene TEMPORARY-Tabelle und niemals die von anderen Instanzen.
Zusammen mit der MEMORY- oder HEAP-Engine eignet sich das daher optimal, um Zwischenergebnisse, auf denen man weitere Abfragen ausführen will, serverseitig zu speichern.
Man könnte das ganze natürlich auch mit einem Subquery lösen, in aller Regel ist das aber viel langsamer als der Weg über die temporäre Tabelle.


3.

Zitat:
ak postete
Man könnte das ganze natürlich auch mit einem Subquery lösen, in aller Regel ist das aber viel langsamer als der Weg über die temporäre Tabelle.
ich moechte mich da nicht festlegen, aber tabellen zu erstellen und wieder loeschen ist schneller und sicherer als abfragen??? ist mir neu.

mal abgesehen davon, wenn der user tabellen anlegen darf, sogar rechte vergeben darf. ist das wirklich besser?

aber gut...leider kann ich dir nicht helfen


4.

Zitat:
fuckregistrierung postete
ich moechte mich da nicht festlegen, aber tabellen zu erstellen und wieder loeschen ist schneller und sicherer als abfragen??? ist mir neu.
Wie immer in der Informatik gibt es nicht ,,die'' Lösung, sondern mehrere Wege.

In meiner Anwendung werden Abfragen vollständig dynamisch generiert, und das Ergebnis dieser Abfragen wird dann in mehreren Schritten analysiert. Und das ist genau der Haken: Die Anzahl der Analyseschritte steigt linear mit der Anzahl der Felder der Ursprungsabfrage - in 90% der Fälle sind das mehr als 5.

Du kannst jetzt also n Mal SELECT <Analyse 1> FROM (SELECT Ursprungsabfrage) ... bis SELECT <Analsyse n> FROM (SELECT Ursprungsabfrage) ausführen, das wäre dann ein Aufwand O(n) da Du ja jedes Mal von neuem die Ursprungsabfrage ausführen mußt.
Oder Du schaufelst eben einmal das Ergebnis von SELECT Ursprungsabfrage in eine temporäre Tabelle und führst dort die n Analyseabfragen aus. Je nachdem, wie viel Zeit SELECT Ursprungsabfrage benötigt, kannst Du dir wahrscheinlich denken, daß die zweite Variante deutliche Vorteile hat, denn da wird SELECT Ursprungsabfrage ja nur ein Mal aufgerufen, also Aufwand O(1).

PS: Temporäre Tabellen werden von MySQL automatisch gelöscht, nachdem der Client die Verbindung schließt. Und wenn Du, wie ich bereits anmerkte, die MEMORY-Engine (anstelle MyISAM z. B.) verwendest, existiert das ganze nur im RAM, Du hast also auch keinen Dateisystem-Overhead.


Hier gehts zum Orginal Eintrag "TEMPORARY-Tabelle und Berechtigungen" im Forum
 
phpforum.de | Impressum | Handy Bundles