2012-03-29 17 views
10

È possibile che un utente diverso da root crei un database?Quale autorizzazione è richiesta per un utente MySQL per creare un database?

GRANT SELECT, CREATE ON *.* TO 'myguy'@'thatmachine' IDENTIFIED BY PASSWORD '*12057DFA2BFBD8760D4788735B1C3E26889D7ECE' | 
GRANT ALL PRIVILEGES ON `db1`.* TO 'myguy'@'thatmachine' 
GRANT ALL PRIVILEGES ON `db2`.* TO 'myguy'@'thatmachine' 

Mi chiedo che cosa manca il privilegio qui? Inoltre, perché la prima riga ha una password allegata?

UPDATE

Vorrei inoltre chiarire quale sia il punto della mia domanda è. Ho due macchine database, sorgente e destinazione. Ci sono molti database clienti sul computer di origine. Ho bisogno di spostare quei database di origine sull'altra macchina di destinazione.

I database sono sotto forma di file mysqldumped .sql, che sono sftp'd dall'origine alla destinazione. L'utente di destinazione, non root, deve quindi ricreare i database localmente da ciascun file .sql, eseguire alcune azioni, quindi rilasciare il database.

Non riesco a trovare un modo per assegnare questi privilegi all'utente di destinazione senza concedergli i privilegi globali su *.*, il che rende efficace quell'utente pericoloso come root.

+1

Interessante. Ok, ecco un pensiero. Invece di usare mysql sul computer di destinazione, utilizzare un database alternativo appositamente per questa transazione. SQLite o qualcosa del genere. In questo modo, le sue autorizzazioni non hanno nulla a che fare con qualsiasi database pienamente operativo, possono essere utilizzati solo con e per il database temporaneo e le azioni. Potrebbe essere necessario modificare alcuni script o cosa no, ma in questo modo sarai molto più sicuro. Crea una piccola tasca di controllo, per questa specifica impresa, e poi annullala quando ha finito. Potrebbe essere un lavoro extra, ma risolverà il problema. –

risposta

7
+4

In una catena di eventi davvero sfortunata, l'utente "myguy" può effettivamente creare database. Lui semplicemente non può distruggerli. Eppure, non voglio che quell'utente sia in grado di distruggere i database che non ha creato, quindi quale privilegio gli do? Perche'e'cosi difficile? – AKWF

+0

@AKWF: Hmph. Questo è davvero ... sfortunato. Si consiglia di concedergli specificamente il privilegio 'DROP' per i database che ha creato, subito dopo averli creati; AFAIK questo non è possibile fare automaticamente in MySQL. Sta creando i database attraverso uno script o non ha alcun controllo sulle sue azioni? – Piskvor

+0

Quello che devi fare è decidere che cosa esattamente vuoi che questo particolare utente sia in grado di fare, quindi concedere loro tali permessi. Ad esempio, secondo questo, ha tutti i privilegi su db1 e db2 e può selezionare e creare su TUTTI i database, ma a quanto pare non può aggiornare o inserire ... configurazione dispari direi. Ma se vuoi solo che abbia letto e aggiorni soltanto, devi fare qualcosa del genere: SELEZIONA GRANT, AGGIORNA SU *. * A 'myguy' @ 'thatmachine' IDENTIFICATA DA PASSWORD '* 12057DFA2BFBD8760D4788735B1C3E26889D7ECE' –

0

Il campo della password è la password di quel particolare utente quando si accede a MySQL. Non sono esattamente sicuro di cosa intendi quando dici che ti chiedi quali siano i privilegi mancanti. Cosa stai cercando di fare esattamente?

+0

Ho un utente che deve scaricare dump di dsql e ripristinarli su un sistema locale. Non so quali saranno i nomi di quei database in anticipo, quindi ho dovuto dare "create on *. *" All'utente. Ho pensato che sarebbe stato logico che un utente che ha creato un database sarebbe stato in grado di rilasciarlo, ma non ha avuto tanta fortuna. Non oso dare all'utente "drop on *. *", Questa è un'applicazione web per Pete's. Voglio solo proteggere questo utente del database e consentire loro di fare alcune cose, ma limitare qualsiasi danno potenziale se l'utente è stato mai dirottato. – AKWF

+0

Per le app Web, è buona norma non consentire la creazione o l'eliminazione di qualcosa a meno che non si sappia che quella persona sa esattamente cosa stanno facendo, ad esempio, nell'uso di PHPMyAdmin. Inoltre, è possibile prendere in considerazione uno schema di database in cui la creazione di interi database non è necessaria. Vedo pochissimi esempi in cui un utente finale deve essere in grado di creare un intero database. –

+0

Anche a questo - davvero ... non si dovrebbe mai eliminare/cancellare nulla, basta usare un campo "cancellato" booleano. –

Problemi correlati