Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

accesso a singoli record

2 views
Skip to first unread message

ettore

unread,
Nov 10, 2009, 4:28:58 AM11/10/09
to
E' possibile inibire l'accesso e la consultazione di specifici record di una
tabella , a determinati utenti del database ?

Senza impostare qualcosa a livello di applicativo che usa il database ( MS
SQL SERVER 2005) , mi chiedevo se potevo impostare qualcosa sul database

grazie e saluti


Luca Bianchi

unread,
Nov 10, 2009, 5:29:23 AM11/10/09
to
> Senza impostare qualcosa a livello di applicativo che usa il database (
> MS SQL SERVER 2005) , mi chiedevo se potevo impostare qualcosa sul
> database

Se il criterio "a livello di applicativo" ce l'hai, con tutta probabilit� la
stessa logica la puoi applicare lato database server. Per� se non ci dici
nulla sui criteri (in base all'utente? in base a dei criteri del record? in
base al giorno del mese?) la risposta non pu� andare oltre...

> grazie e saluti

Bye

--
Luca Bianchi
Microsoft MVP - SQL Server


ettore

unread,
Nov 10, 2009, 5:46:13 AM11/10/09
to
>
> Se il criterio "a livello di applicativo" ce l'hai, con tutta probabilit�
> la stessa logica la puoi applicare lato database server.

non esiste tale criterio sull'applicativo , perch� il programmatore non l'ha
messo , vorrei metterlo io ( ma sul database , visto che non ho i sorgenti
dell'applicativo ....) .

Ad esempio un certo utente dell'applicativo ( che coincide con l'utente del
database ) non deve vedere certi record di una certa tabella .

Si pu� fare ?

Ciao


Luca Bianchi

unread,
Nov 10, 2009, 6:13:26 AM11/10/09
to
> Ad esempio un certo utente dell'applicativo ( che coincide con l'utente
> del database ) non deve vedere certi record di una certa tabella .

Per indicarti una strada (ammesso che esista e/o che io la conosca) dovresti
dirmi il criterio e non la definizione della parola "criterio", non trovi?

> Ciao

ettore

unread,
Nov 10, 2009, 8:07:21 AM11/10/09
to
.
>
> Per indicarti una strada (ammesso che esista e/o che io la conosca)
> dovresti dirmi il criterio e non la definizione della parola "criterio",
> non trovi?

l'utente pippo non pu� visualizzare i record della tabella DOCUMENTI nella
cui colonna TIPO DOC c'� FATT .

tale colonna pu� contenere i 3 valori FATT , BOLLA , ORDINE : pippo deve
visualizzare solo gli ultimi due .

Grazie

PS : attualmente l'accesso all'istanza del database usa l'autenticazione
mista , dovr� poi impostare l'autenticazione solo SQL per poter
discriminare gli utenti che tentano di accedere al database ?
Oppure verranno discriminati in base all'utente di sistema windows che hanno
?

Eventualmente si fa la mappatura login tra utente win e utente sql ?

Ciao


Luca Bianchi

unread,
Nov 10, 2009, 9:09:13 AM11/10/09
to
> l'utente pippo non pu� visualizzare i record della tabella DOCUMENTI nella
> cui colonna TIPO DOC c'� FATT .
>
> tale colonna pu� contenere i 3 valori FATT , BOLLA , ORDINE : pippo deve
> visualizzare solo gli ultimi due .

OK per Pippo e la soluzione � questa

SELECT *
FROM T
WHERE CASE SYSTEM_USER WHEN 'Pippo' THEN 'FATT' ELSE 'ggg' END <> v

Vista la tua diffidenza nel dare altre info (ad esempio gli altri utenti che
devono fare?) potresti aver bisogno di customizzare la condizione di
ricerca...

> PS : attualmente l'accesso all'istanza del database usa l'autenticazione
> mista , dovr� poi impostare l'autenticazione solo SQL per poter
> discriminare gli utenti che tentano di accedere al database ?

L'autenticazione "solo SQL" non esiste pi� da SQL Server 6.5; sia che
utilizzi un account di SQL Server e sia che un account windows sei comunque
in grado di discriminare l'utente che si connette al database server.

> Oppure verranno discriminati in base all'utente di sistema windows che
> hanno ?

Se utilizzi l'autenticazione windows si. Se utilizzi l'autenticazione di SQL
ogni utente sar� riconosciuto in base alle credenziali che vengono fornite
in fase di autenticazione.

> Eventualmente si fa la mappatura login tra utente win e utente sql ?

Che significa...?!?!?

ettore

unread,
Nov 10, 2009, 1:43:39 PM11/10/09
to
>> Eventualmente si fa la mappatura login tra utente win e utente sql ?
>
> Che significa...?!?!?


situazione attuale :

a livello di sistema windows ho 4 account utente ( pippo , pluto,paperino ,
paperoga)

a livello di database sql , ho un solo utente ( sa ) , usato da tutti gli
utenti .

Non bisogna quindi creare adesso altri 3 utenti del database , e poi
metterli in corrispondenza univoca con gli utenti windows ?

Senn� come fa sql a distinguere pippo ?

inoltre vorrei sapere cosa vuol dire 'ggg' nella query :


SELECT *
FROM T
WHERE CASE SYSTEM_USER WHEN 'Pippo' THEN 'FATT' ELSE 'ggg' END

NB : Comunque pensavo che si potessero inserire permessi e divieti
direttamente sul database , cio� sulla tabella , dal momento che io non ho
il sorgente del programma , per cui quella query come faccio ad usarla
dall'applicativo ? Gli utenti accedono alla tabella usando delle FORM
dell'applicativo , come posso qui ndi filtrare i record in base all'utente ?
Non ho il codice del gestionale...

Ciao e grazie

Luca Bianchi

unread,
Nov 10, 2009, 3:29:24 PM11/10/09
to
> a livello di database sql , ho un solo utente ( sa ) , usato da tutti gli
> utenti .

Scelta peggiore non poteva essere fatta...

> Non bisogna quindi creare adesso altri 3 utenti del database , e poi
> metterli in corrispondenza univoca con gli utenti windows ?
>
> Senn� come fa sql a distinguere pippo ?

Ovviamente ognuno deve avere un account differente. Che sia un account di
SQL Server o un account windows poco importa. Con quest'ultima frase
ovviamente mi riferisco all'account che si presenta a SQL Server
(dall'applicazione).

> inoltre vorrei sapere cosa vuol dire 'ggg' nella query :

E' una qualunque stringa diversa dal contenuto dei campi...

> NB : Comunque pensavo che si potessero inserire permessi e divieti
> direttamente sul database , cio� sulla tabella ,

Sulla tabella si. Ma tu vorresti mettere i permessi ad una granularit� pi�
bassa (la riga)

> dal momento che io non ho il sorgente del programma ,

Questo � un problema...

> Ciao e grazie

Bye

--
Luca Bianchi
Microsoft MVP - SQL Server

http://community.ugiss.org/blogs/lbianchi

ettore

unread,
Nov 11, 2009, 11:27:02 AM11/11/09
to
>
> Sulla tabella si. Ma tu vorresti mettere i permessi ad una granularit� pi�
> bassa (la riga)

ok , � quello che volevo sapere , cio� se si potevano impostare permessi e
divieti anche a livello di colonne e righe , e non solo a livello di tabelle
intere .

Grazie


Luca Bianchi

unread,
Nov 11, 2009, 2:28:26 PM11/11/09
to
> ok , � quello che volevo sapere , cio� se si potevano impostare permessi
> e divieti anche a livello di colonne e righe , e non solo a livello di
> tabelle intere .

Sulle colonne si; sulle righe no (e i motivi dovrebbero essere ovvi).

> Grazie

ettore

unread,
Nov 11, 2009, 4:38:53 PM11/11/09
to
>
> Sulle colonne si; sulle righe no (e i motivi dovrebbero essere ovvi).
>

perch� ?

esempio tabella nazioni , non voglio che un utente acceda alla riga 5 che
corrisponde al Brasile : perch� non posso impostare un permesso\divieto
sul record 5 ?

grazie


Luca Bianchi

unread,
Nov 11, 2009, 5:01:29 PM11/11/09
to
> esempio tabella nazioni , non voglio che un utente acceda alla riga 5 che
> corrisponde al Brasile : perch� non posso impostare un permesso\divieto
> sul record 5 ?

Perch� i record, rispetto alle colonne, sono dinamici e chi inserisce il
record dovrebbe assegnarvi contestualmente anche dei permessi e questa non �
una prerogativa di un utente ma di chi ha un ruolo pi� elevato. Inoltre devi
considerare che il tentativo di accedere ad un oggetto senza disporre dei
necessari permessi genera un errore mentre tu vorresti che il record venisse
saltato.
Alla base c'� un presupposto sbagliato: stai confondendo i permessi con i
criteri di selezione.
Se vuoi FILTRARE i record in base ad un criterio la soluzione naturale �
quella di definire un oggetto che, dinamicamente, escluda dei record in base
ad un dato criterio (WHERE riga <> 5). Questo � sempre stato possibile
tramite le viste, le stored procedure o le user defined functions. Scegli
tu...

> grazie

0 new messages