Esistono fondamentalmente due tipi di organizzazione dei dati e conseguente limitazione di accesso.
Il primo io lo definisco "orizontale". In questo modello gli utenti stanno tutti sullo stesso livello ed hanno accesso allo stesso "tipo" di informazioni. Tuttavia ogni utente ha accesso solo ai dati che esso stesso a generato. Mi sono occupato del progetto UniWeb(www.dmi.unict.it/uniweb) che era organizzato bene o male in questo modo. Li gli utenti "accreditati" erano solo docenti. Ad ogni docente veniva assegnato un certo numero di materie ed una home, e il docente aveva pieni poteri su queste. L'implementazione risulta abbastanza semplice poichè basta aggiungere ai record dove sono memorizzati i dati un campo "owner" e restringere l'accesso in base all'utente che sta eseguendo l'operazione. Ammettiamo ad esempio di eseguire un update. Basta aggiungere in coda, fra le condizioni del where, la condizione "OWNER = utente_collegato"
Un secondo tipo di organizzazione e' quello ad "albero". In questo modello le informazioni e le funzionalità sono organizzate in una struttura ad albero, ed ogni utente ha o meno accesso ad ogni nodo dell'albero. Questo modello risulta più complicato da implementare, inquanto necessita di un controllo prima di eseguire ogni operazione.
Tematiche differenti sono la "sicurezza" del db e la protezione delle password durante il loro trasporto su internet. Nel primo caso possono verificarsi delle vulnerabilità dovute a imperfezioni software del data-base. Per metterti a riparo da questo problema ti conviene non esporre direttamente il db su internet, ma metterlo su una macchina apposita in comunicazione diretta col web-server sul quale gira l'applicazione.
Per quanto riguarda la protezione delle password e' sufficente farle viaggiare crittografate mediante l'utilizzo di protocolli SSL e TSL ormai collaudati e riconosciuti sicuri.
Sono stato forse un po troppo dettagliato, ma spero di aver risposto in maniera esauriente alla tua domanda.