2012-04-20 16 views
15

Questa domanda nasce dalla curiosità. Ho cercato su google per questo, ma non ho avuto la minima idea.sql connessione aperta in modalità di sola lettura

Supponiamo che un utente abbia accesso completo in lettura/scrittura al database MySQL. Mi chiedo, c'è qualche modo (qualche parametro nella stringa di connessione) per connettersi al database con lo stesso nome utente e password in modalità di sola lettura?

Desidero questo senza modificare le autorizzazioni di questo utente perché lo stesso utente potrebbe richiedere anche il permesso di scrittura in un altro momento. Ciò sarebbe utile (se possibile) per impedire modifiche accidentali al database.

+0

Controllare le domande correlate. http://stackoverflow.com/questions/654656/odbc-5-1-connection-string-for-mysql-with-read-only-access http://stackoverflow.com/questions/10122745/mvc3-read-only-mysql-connection-string – hgulyan

+1

Secondo loro, non c'è modo di specificare l'accesso in sola lettura tramite la stringa di connessione. In realtà dovresti creare un utente sql con permessi di sola lettura o creare un livello di permessi nella logica di business del tuo software. – hgulyan

risposta

4

La soluzione migliore qui è creare un altro account sul server mysql con autorizzazioni di sola lettura e connettersi utilizzando quello.

+0

Lo so. Ma mi stavo chiedendo se c'è qualche opzione senza questo? Grazie. – gtiwari333

+0

Purtroppo no. Ho considerato di fare qualcosa di intelligente come bloccare immediatamente tutte le tabelle nel tuo database per leggere, ma (a) ciò causerebbe un incubo per la concorrenza e (b) è facile uscire malevolo se SBLOCCA TAVOLI e (c) ti impedisce dall'utilizzare il blocco nella query (anche se una sessione di sola lettura probabilmente non è troppo propensa a utilizzarla comunque.Sai di più sul sistema di destinazione di noi, quindi se LOCK TABLES tablename READ funzionerà per te, evviva, altrimenti sì, la cosa migliore e ~ corretta da fare è avere due utenti con uno in sola lettura. –

11

La risposta alla tua domanda è

No, non c'è modo di specificare accesso in sola lettura nella stringa di connessione.

Le alternative sono

1. Creare utente SQL con permesso di lettura

MVC3 Read-Only MySql Connection String

2. creare viste o stored procedure con i permessi check-logica in loro

MS SQL Grant permission to only a view

MySQL Grant a user permission to only view a mysql view

3. Implementare le autorizzazioni di livello nella vostra logica di business

Good Luck!

+0

Sull'elemento 3, il collegamento fornito è per MS SQL Server. Non sono sicuro di come garantire un accesso simile a MySQL in sola lettura. –

+1

@GeorgeBailey Intendi sull'elemento 2 sulla concessione dell'autorizzazione a livello di vista? Grazie per la cattura. Ho aggiunto un collegamento per MySQL, sembra che la sintassi sia simile. Grazie ancora! – hgulyan

0

A seconda del caso d'uso e di quale controllo si dispone, è possibile effettuare la chiamata di codice "imposta transazione sola lettura" subito dopo la connessione oppure utilizzare il parametro --init-command alla connessione. Questo ha funzionato per un caso di utilizzo di prova che abbiamo,

Ecco il documento di transazione impostato: https://dev.mysql.com/doc/refman/5.7/en/set-transaction.html, allo stesso modo è possibile anche impostarlo come variabile di sessione se questo fa la differenza https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_transaction_read_only.