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
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
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
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
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
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...?!?!?
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
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
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
Sulle colonne si; sulle righe no (e i motivi dovrebbero essere ovvi).
> Grazie
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
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