Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso fare in modo che MySQL scriva outfile come un utente diverso?

Il file di output viene creato dal processo mysqld, non dal processo client. Pertanto il file di output deve essere di proprietà dell'uid e del gid del processo mysqld.

Puoi evitare di dover sudo per accedere al file se accedi ad esso da un processo sotto un uid o gid che può accedere al file. In altre parole, se mysqld crea file di proprietà di uid e gid "mysql"/"mysql", aggiungi il tuo account al gruppo "mysql". Quindi dovresti essere in grado di accedere al file, a condizione che la modalità di autorizzazione del file includa l'accesso di gruppo.

Modifica:

Stai eliminando un file in /tmp, con una modalità di autorizzazione directory di rwxrwxrwt. Il bit permanente ("t") significa che puoi rimuovere i file solo se il tuo uid è lo stesso del proprietario del file, indipendentemente dai permessi sul file o sulla directory.

Se salvi il file di output in un'altra directory in cui non è impostato lo sticky bit, dovresti essere in grado di rimuovere il file normalmente.

Leggi questo estratto dalla pagina man di sticky(8):

DIRECTORY ADESIVE

Una directory il cui 'sticky bit' è impostato diventa una directory di sola aggiunta o, più precisamente, una directory in cui l'eliminazione dei file è limitata. Un file in una directory permanente può essere rimosso o rinominato da un utente solo se l'utente dispone dell'autorizzazione di scrittura per la directory e l'utente è il proprietario del file, il proprietario della directory o il superutente. Questa funzione viene utilmente applicata a directory come /tmp che devono essere scrivibili pubblicamente ma dovrebbero negare agli utenti la licenza per eliminare o rinominare arbitrariamente i file degli altri.