[MySQL] DROP DATABASE niet toestaan

Pagina: 1
Acties:

  • JeRa
  • Registratie: Juni 2003
  • Laatst online: 07-05 12:51
Ik dacht dat het een veelbesproken 'probleem' was, maar zowel met Google als hier op GoT vind ik geen antwoorden.

Ik bied gebruikers een webinterface aan waarmee ze MySQL-gebruikers en -databases kunnen aanmaken/wijzigen/verwijderen. Als ze nu een database aanmaken (dbnaam), inloggen met een gebruiker die rechten heeft op die database (standaard dbnaam.*) en een 'DROP DATABASE dbnaam' uitvoeren dan zijn ze die database kwijt. Dit terwijl de database nog wel in de webinterface staat (gescheiden administratie).

Nu is er een workaround door gewoon om de zoveel tijd te controleren of de databases nog wel bestaan en zo niet, ze weer aan te maken en de permissies goed te zetten :) maar ik wil gewoon dat gebruikers sowieso geen DROP DATABASE kunnen uitvoeren. Ze hebben ook geen globale CREATE-permissies, dus dan is het toch onzin dat ze een DROP DATABASE-recht hebben?

Vraag: hoe zorg ik ervoor dat ze geen DROP DATABASE kunnen uitvoeren?

[ Voor 6% gewijzigd door JeRa op 06-04-2006 14:34 ]


  • ZroBioNe
  • Registratie: Augustus 2001
  • Niet online
Ok en wat is je vraag? :)
(wel leuk verhaal :))

[ Voor 32% gewijzigd door ZroBioNe op 06-04-2006 14:32 ]


  • JeRa
  • Registratie: Juni 2003
  • Laatst online: 07-05 12:51
ZroBioNe schreef op donderdag 06 april 2006 @ 14:31:
Ok en wat is je vraag? :)
(wel leuk verhaal :))
Tnx, ik zal 'm even voor je toevoegen ;) hij stond eerlijk gezegd al half in de TT.

[ Voor 12% gewijzigd door JeRa op 06-04-2006 14:35 ]


  • ZroBioNe
  • Registratie: Augustus 2001
  • Niet online
Wat zijn nu de permissies van een user die een database kan droppen?

  • Justice
  • Registratie: Maart 2001
  • Laatst online: 07-08-2025
"drop" is gewoon een recht die je aan/uit kan zetten doormiddel van bijvoorbeeld een checkbox in je admin pakket dat je gebruikt zoals phpmyadmin.

Werkt dit niet voor je? Kan je het niet vinden? Gebruik je geen pakket? Heb je geen apart gebruikers account? Waar heb je op gezocht? etc etc. :) Er zijn duizenden mogelijkheden nog open met je vraagstelling, snappie?

[ Voor 14% gewijzigd door Justice op 06-04-2006 14:39 ]

Human Bobby


  • [ash]
  • Registratie: Februari 2002
  • Laatst online: 16-08 20:24

[ash]

Cookies :9

Is dit wat je zoekt: 5.7.3. Privileges Provided by MySQL?

  • JeRa
  • Registratie: Juni 2003
  • Laatst online: 07-05 12:51
ZroBioNe schreef op donderdag 06 april 2006 @ 14:37:
Wat zijn nu de permissies van een user die een database kan droppen?
Een user heeft recht op een eigen database door middel van:
GRANT ALL PRIVILEGES ON dbnaam.* TO usernaam@%
Justice schreef op donderdag 06 april 2006 @ 14:38:
"drop" is gewoon een recht die je aan/uit kan zetten doormiddel van bijvoorbeeld een checkbox in je admin pakket dat je gebruikt zoals phpmyadmin.
Dat weet ik :)
Werkt dit niet voor je? Kan je het niet vinden? Gebruik je geen pakket? Heb je geen apart gebruikers account? Waar heb je op gezocht? etc etc. :) Er zijn duizenden mogelijkheden nog open met je vraagstelling, snappie?
Snap je eigenlijk wel wat ik wil doen? Ik bied databases aan voor users die hun eigen MySQL-gebruikers kunnen beheren. Deze gebruikers krijgen door middel van een webinterface permissies op de eigen databases, maar dit houdt in dat ze die ook kunnen droppen. Dit wil ik niet.
Nee, dat is niet wat ik zoek. Zoals je op die pagina kunt lezen staat daar "databases or tables" achter DROP, maar in plaats van dat een globale DROP-permissie toestaat om databases te droppen doet een DROP-permissie op alléén de database dat ook. Dit mag ook wel, ware het niet dat er géén onderscheid wordt gemaakt tussen tables en databases. De eerste soort mag gedropt worden, de tweede soort niet.

  • JeRa
  • Registratie: Juni 2003
  • Laatst online: 07-05 12:51
Kickje. Samenvatting van wat ik dus wil: user moet tabellen kunnen maken en droppen, maar mag niet de database waarin ze staan droppen. :)

  • JeRa
  • Registratie: Juni 2003
  • Laatst online: 07-05 12:51
Niemand? Ook niet iemand die weet waarom de implementatie van rechten zo in elkaar steekt? Ik mis de logica erachter namelijk :) zoals het er nu uit ziet zal ik toch via een cronjob moeten controleren of de databases nog bestaan.

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Je kan de verschillende privileges zowel per database, als per tabel met wildcards specificeren. Het lijkt me dus dat dit precies doet wat jij wilt:
SQL:
1
2
REVOKE DROP ON `dbname` FROM user
GRANT DROP ON dbname.* TO user
Mocht de 2e regel niet het gewenste effect hebben werkt dit wellicht wel:
SQL:
1
GRANT DROP ON dbname.% TO user

[ Voor 4% gewijzigd door Spider.007 op 09-04-2006 14:27 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • JeRa
  • Registratie: Juni 2003
  • Laatst online: 07-05 12:51
@Spider.007

Ik heb het getest:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-- User = admin:
CREATE USER 'testuser'@'%' IDENTIFIED BY '***';
GRANT USAGE ON *.* TO 'testuser'@'%' IDENTIFIED BY '***';
CREATE DATABASE `testuserdb`;
GRANT ALL PRIVILEGES ON `testuserdb`.* TO 'testuser'@'%'

-- Nu is het als het goed is mogelijk voor testuser om de database te droppen
-- User = testuser:
DROP DATABASE `testuserdb`;
-- Query OK, 0 rows affected (0.00 sec)

-- User = admin:
CREATE DATABASE `testuserdb`;
REVOKE DROP ON `testuserdb` FROM 'testuser'@'%'
-- #1147 - There is no such grant defined for user 'testuser' on host '%' on table 'testuserdb'

Oftewel, als ik geen wildcard opgeef denkt MySQL5 dat het een table betreft in plaats van een database :) dan kan ik wel een wildcard opgeven maar dan doe ik precies hetzelfde als op het begin.

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

You cannot specify that a user has privileges to create or drop tables in a database but not to create or drop the database itself.
Dan zul je inderdaad naar een andere oplossing moeten gaan kijken

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • JeRa
  • Registratie: Juni 2003
  • Laatst online: 07-05 12:51
Spider.007 schreef op zondag 09 april 2006 @ 15:06:
[...]

Dan zul je inderdaad naar een andere oplossing moeten gaan kijken
Mjup. Enig idee waarom er deze logica achter zit? Waarom kan ik rechten definiëren per tabel en zelfs per kolom van een bepaalde tabel maar niet voor een bepaalde database?

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Als een gebruiker alle tables dropt is toch alsnog effectief de database gedropt, alleen bestaat de db dan nog als lege db ...

Ik kan me die logica op zich wel voorstellen: Als je een user het recht geeft om (alle) tabellen uit een database te droppen kan ie ook de database zelf droppen ...

  • JeRa
  • Registratie: Juni 2003
  • Laatst online: 07-05 12:51
TheRookie schreef op zondag 09 april 2006 @ 15:16:
Als een gebruiker alle tables dropt is toch alsnog effectief de database gedropt, alleen bestaat de db dan nog als lege db ...

Ik kan me die logica op zich wel voorstellen: Als je een user het recht geeft om (alle) tabellen uit een database te droppen kan ie ook de database zelf droppen ...
Als ik iemand het recht geef om DELETE- en ALTER-statements uit te voeren (en dus tabellen helemaal leeg te maken/te verminken) hebben ze nog niet het recht op tables te droppen. Zeker uit shared webhosting-opzicht snap ik niet dat ze geen onderscheid hebben gemaakt tussen DROP TABLE en DROP DATABASE :)

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Daar heb je ook weer gelijk in :)
Stuur een feature request naar MySQL :P
Pagina: 1