2012-04-16 8 views
5

Ho una tabella con una colonna che voglio impedire a determinati utenti di vedere. Capisco che dovrei essere in grado di farlo usando una vista, cioè avere una vista che esclude la particolare colonna, e negare l'accesso alla tabella ma consentire l'accesso alla vista (nota, gli utenti non hanno bisogno di essere in grado di aggiornare la tabella /vista).Mysql: consentire la query su una colonna altrimenti inaccessibile?

I do tuttavia si desidera consentire una query di uguaglianza sul campo. Quali:

SELECT * FROM some_table_or_view WHERE hidden_field = 'some_value'; 

Per chiarire:

  • non dovrebbe essere possibile avere i valori hidden_field essere restituiti in una query generale
  • dovrebbe essere possibile eseguire una query con un vincolo (preferibilmente solo un vincolo di uguaglianza) sul valore hidden_field

È possibile?

(MODIFICA: se c'è una soluzione in un dbms diverso da Mysql, sarei felice di sentirlo anche a questo).

risposta

4

È possibile creare una stored procedure che restituisca tutti i campi a cui è consentito restituire, quindi è possibile passare il valore hidden_value (criterio di filtro) come parametro.

Vietare agli utenti del database l'accesso alla tabella, ma consentire loro di chiamare stored procedure.

Quindi, ovviamente, dovresti creare diverse stored procedure se hai avuto diversi tipi di query sulla tabella. Ma almeno risolve il tuo problema con i diritti.

+0

Grazie, è un buon suggerimento e potrebbe essere praticabile. – davmac

0

No, non lo è. Dare all'utente la possibilità di filtrare i risultati con la colonna hidden_value significa che hanno diritti di selezione, e questo significa anche che possono vedere la colonna, e quindi selezionarla. Qui http://dev.mysql.com/doc/refman/5.1/en/grant.html è un elenco dei diritti che è possibile concedere o meno agli utenti in mySQL.

Problemi correlati