2010-06-01 8 views
35

I mehrere eine MySQL-Benutzer haben wollen in der Lage sein zu erteilen Befehle wieLassen Sie MySQL-Benutzer Datenbanken erstellen, sondern nur ihre eigenen Datenbanken Zugriff erlauben

CREATE DATABASE dbTest; 

Aber ich möchte auch jeder dieser Nutzer in der Lage sein, nur ihre eigenen Datenbanken zu sehen und zuzugreifen.

Alles, was ich finden konnte, war, wie entweder die Datenbanken, die von einem DBA zu erstellen und die Berechtigungen für diese Datenbank zu den spezifischen Benutzern erteilen:

GRANT ALL PRIVILEGES ON dbTest.* TO 'user'; 

oder Privilegien vergeben für alle Datenbanken zu einem Benutzer:

GRANT ALL PRIVILEGES ON *.* TO 'user'; 

Aber beides ist nicht was ich will, denn es muss skalieren und sicher sein.

Antwort

65

können Sie

GRANT ALL PRIVILEGES ON `testuser\_%` . * TO 'testuser'@'%'; 

verwenden, um den Benutzer testuser Berechtigungen auf alle Datenbanken, deren Namen mit testuser_ beginnen zu gewähren.

Dies ermöglicht dem Testuser Datenbanken zu den Namen mit testuser_ eine gespeicherte Prozedur erstellen

+0

Wenn ich dies ausführe bekomme ich ERROR 1064 ... richtige Syntax in der Nähe von '* TO' testuser '@'% '' bei Zeile 1 – Asaf

+0

Könnten Sie die gesamte Abfrage veröffentlichen? –

+0

Ich habe bemerkt, dass dies nur passiert, wenn unter mysql -u root -e "QUERY" ausgeführt wird, funktioniert es, wenn Sie die Backticks mit Backslashes umgehen – Asaf

12

Start beschränkt zu erstellen, die durch den Benutzer admin definiert ist und ruft mit dem Admin-Benutzerrechte von SQL SECURITY DEFINER verwenden. In der gespeicherten Prozedur

  • Erstellen Sie die Datenbank.
  • Legen Sie die Berechtigungen für die Datenbank fest, auf die nur der aktuelle Benutzer Zugriff hat.
  • Führen Sie FLUSH PRIVILEGES aus, um die Berechtigungen aus den Berechtigungstabellen neu zu laden.

Verwenden Sie USER(), um die aktuellen Benutzeranmeldedetails abzurufen.

Find out more about SQL SECURITY DEFINER.

+1

Wo die gespeicherte Prozedur erstellen. Welche Datenbank hat diese gespeicherte Prozedur? – Nest

19

können Sie

GRANT ALL PRIVILEGES ON `testuser_%` . * TO 'testuser'@'%'; 

verwenden, um den Benutzer testuser Berechtigungen auf alle Datenbanken, deren Namen mit testuser_ beginnen zu gewähren.

EDIT: Ich bin mir nicht sicher, ob dieser Benutzer nun auch Datenbanken erstellen darf.

Ja, ermöglicht dies die testuser Datenbanken zu erstellen, um Namen beschränkt, beginnend mit testuser_

+2

Ich musste Backticks um testuser_% wickeln, aber unglücklicherweise im Stapelüberlauf, der nicht durchkommt, da Backticks einen Codeabschnitt bedeuten. – Programster

+8

Dies sollte ein Kommentar zu Lex's Antwort sein, keine Antwort selbst. –

+0

Ich bin nicht sicher, ob dieser Benutzer nun auch Datenbanken erstellen darf .... Nein, ist es nicht. – sitilge

0

Es ist unmöglich, nur diese mit Berechtigungen zu tun.

Die Abhilfe, wie in einer anderen Antwort vorgeschlagen: GRANT ALL PRIVILEGES ON testuser_% . * TO 'testuser'@'%'; hat das Problem, dass die Benutzer dann sehr vorsichtig bei der Benennung ihre Datenbanken sein müssen.

Zum Beispiel, wenn der Benutzer aaa Datenbank erstellt bbb_xyz, es kann dann ausschließlich durch bbb Benutzer zugegriffen werden, aber nicht durch den Benutzer aaa.

Verwandte Themen