47 messaggi dal 09 settembre 2008
Ciao a tutti,
sto cercando informazioni su internet ma con scarsi risultati.
Vorrei porre una domanda: é possibile, data una precisa struttura di n-tabelle, fare in modo che un utente possa
effettuare le operazioni di CRUD solo su record da lui inseriti.
Ovvero, sfruttare le medesime tabelle, senza cambiare la definizione delle stesse, ma avendo la possibilità
di "filtrare" a monte solo i record di cui ne é proprietario.
E possibile ?

Grazie
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
Senza modificare nulla è impossibile; l'utente che ha inserito il record non è una informazione memorizzata tra i metadati (non esistono metadati sulla singola riga). Puoi però cavartela con modifiche minime, ovvero l'aggiunta di un campo su ciascuna tabella dove vuoi implementare la "row level security" e valorizzare questo campo per default con la funzione SYSTEM_USER o funzioni similari.
Il secondo step è quello di definire, per ciascuna di queste tabelle, una vista simile a

CREATE VIEW dbo.vw_MyView AS
SELECT c1, c2, ..., cn
FROM dbo.MyTable
WHERE campouser = SYSTEM_USER

Fatto questo hai tutto. Gli utenti utilizzeranno la vista al posto della tabella per fare qualunque operazione potendo vedere, modificare ed eliminare solo i dati che visualizzano e che hanno loro stessi inserito.

Bye
47 messaggi dal 09 settembre 2008
Ringrazio per la risposta.
Purtroppo le tabelle sono già in essere e sono circa una trentina e volevo cercare una strada alternativa alla creazione di una colonna in ogni tabella.
Oltre alla soluzione proposta, pensavo anche ad una unica tabella contenente alcuni campi quali:
IDRecord, KF
IDTabella, FK
IDUser, FK
CRUDParams, varchar.
Questo per non stravolgere completamente la struttura delle tabelle, ma può avere senso ?

Grazie

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.