2009-12-10 4 views
5

Unsere Benutzer melden sich als recht niedriger Benutzer in der Produktionsdatenbank an, wobei SELECT auf Datenbankebene gewährt wird und INSERT/UPDATE/DELETE für die spezifischen Tabellen erteilt wird, auf die sie zugreifen müssen.Gibt es eine bessere Möglichkeit, Berechtigungen für temporäre Tabellen in MySQL zuzuweisen?

Sie haben auch Berechtigungen zum Erstellen temporärer Tabellen (wir brauchen sie für einige der komplizierteren Abfragen). Das Problem ist, dass sie zwar die temporären Tabellen erstellen können, aber keinen Zugriff auf sie haben!

Eine Problemumgehung, die wir gefunden haben, besteht darin, eine "echte" (persistente?) Tabelle desselben Namens (aber mit nur einem Feld) zu erstellen und ihnen Zugriff zu gewähren. Wenn die temporäre Tabelle mit demselben Namen erstellt wird, verwendet das System diese nicht die persistente Tabelle.

mysql> CREATE TEMPORARY TABLE `testing` (`id` INTEGER AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(30)); 
Query OK, 0 rows affected (0.04 sec) 
mysql> INSERT INTO `testing` (`name`) VALUES ('testing'); 
ERROR 1142 (42000): INSERT command denied to user 'stduser'@'office.companyname.co.uk' for table 'testing' 

Wenn Sie versuchen, Zugriff auf die Tabelle zu gewähren (in einer anderen Sitzung, als root), können Sie nicht:

mysql> GRANT INSERT ON testdb.testing TO 'stduser'@'%'; 
ERROR 1146 (42S02): Table 'testdb.testing' doesn't exist 

Also meine Frage ist, im Grunde können wir INSERT gewähren/UPDATE/DELETE bei temporären Tabellen, ohne dass eine "persistente" Tabelle mit demselben Namen herumhängt?

Antwort

5

Nach dem MySQL reference:

MySQL können Sie Privilegien auf Datenbanken oder Tabellen gewähren, die es gibt nicht tun. Bei Tabellen müssen die Berechtigungen für die Berechtigung CREATE enthalten.

Versuchen Sie also, die CREATE-Berechtigung für die obige Anweisung zu erteilen.

+0

erstellen Ich habe gerade dies in der Testumgebung versucht, und Sie sind in der Tat richtig! Schade, dass Sie CREATE (nicht nur CREATE TEMPORARY TABLES) zu gewähren, aber vielen Dank. – Drarok

1

MySQL-Grants sind unabhängig vom Objekt tatsächlich vorhanden - Sie können auf Tabellen gewähren, die (noch) nicht existieren und diese Berechtigungen würden einer Tabelle zugewiesen werden, wenn es erstellt werden würde. Dies bedeutet, dass Sie einem Benutzer die Berechtigung zum Erstellen einer bestimmten Tabelle erteilen können.

Ich wäre versucht, eine Datenbank nur für temporäre Tabellen zu erstellen (z. B. temp) und gewähren den Benutzern Zugriff auf diese Datenbank. Datenbankbasierte Berechtigungen sind viel einfacher zu verwalten als pro Objekt.

+0

"MySQL-Grants sind unabhängig von dem Objekt tatsächlich vorhanden - Sie können auf Tabellen gewähren, die (noch) nicht existieren und diese Berechtigungen würden einer Tabelle zugewiesen werden, wenn es erstellt werden würde." Ich glaube nicht, dass dies der Fall ist, siehe Fehler 1146 oben. – Drarok

4

Eine Möglichkeit besteht darin, eine spezielle Datenbank zu erstellen, dem Benutzer Schreibzugriff zu gewähren und diese temporären Tabellen in dieser speziellen Datenbank zu erstellen.

+0

Dies hilft bei anderen Problemumgehungen wie Wiedereröffnung temporärer Tabellen, Sie können echte – KCD

Verwandte Themen