Join su diversi db e assegnazione grant

martedì 31 agosto 2010 - 10.29
Tag Elenco Tags  Windows Server 2003  |  SQL Server 2005

kiaraluna Profilo | Newbie

Buongiorno a tutti ........
ho creato una vista che effettua una join tra tabelle di divesi db
utilizzando la seguente sintassi di esempio (la vista è + complessa in realtà ma.....
non è questo il problema) :
SELECT * FROM db1.dbo.Tabella1 T1 JOIN Tabella2 T2
ON T1.campo1=T2.campo2
La vista funziona perfettamente restituisce i record voluti ecc...
Per permettere ad un utente di eseguire la select sulla vista devo necessariamente abilitare la vista e la tabella presente sul db1 ......... non esiste un modo per evitare di dover assegnare la grant di select anche sulla tabella del db1?

grazie in anticipo ......

lbenaglia Profilo | Guru

>La vista funziona perfettamente restituisce i record voluti ecc...
>Per permettere ad un utente di eseguire la select sulla vista
>devo necessariamente abilitare la vista e la tabella presente
>sul db1 ......... non esiste un modo per evitare di dover assegnare
>la grant di select anche sulla tabella del db1?

Puoi ovviare al problema abilitando il cross-database ownership chaining però occhio ai potenziali pericoli di sicurezza elencati in questo paragrafo dei Books Online:
http://technet.microsoft.com/en-us/library/ms188676.aspx

> grazie in anticipo ......
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

kiaraluna Profilo | Newbie

Grazie per il suggerimento!!!
Proprio non è previsto nessun altro metodo meno ........rischioso?????
Una sorta di cross-tabella che permetta di l'accesso alla seconda tabella senza che
l'utente finale sia abilitato a vederne il contenuto!!!!
Nemmeno se la seconda tabella è chiamata cn una funzione di tipo tabella o altri strumenti?????

scusami se insisto ma ....è antipatico dover concedere a cascata autorizzazioni sui vari oggetti ogni volta
che si abilita un vista complessa alimentata da oggetti presenti su vari db
saluti

PS: se utilizzassi la clausola
EXECUTE AS login = 'utente'
posso creare una Funzione o generare una vista che legge la tabella del db1 dicendogli di usare un determinato utente (e poi criptarla magari....per maggiore sicurezza)
questo mi potrebbe permettere evitare il grant all 'utente finale o no ?????
grazie per la pazienza
bye

lbenaglia Profilo | Guru

>Proprio non è previsto nessun altro metodo meno ........rischioso?????
Secondo me la soluzione migliore consiste nel mappare lo la login anche al sedondo db definendo un opportuno user account ed assegnando le permission di SELECT sulla tabella interrogata dalla vista.

>scusami se insisto ma ....è antipatico dover concedere a cascata
>autorizzazioni sui vari oggetti ogni volta
>che si abilita un vista complessa alimentata da oggetti presenti
>su vari db
Generalmente le cose antipatiche sono anche quelle più sicure

> PS: se utilizzassi la clausola
>EXECUTE AS login = 'utente'
>posso creare una Funzione o generare una vista che legge la tabella
>del db1 dicendogli di usare un determinato utente (e poi criptarla
>magari....per maggiore sicurezza)
>questo mi potrebbe permettere evitare il grant all 'utente finale
>o no ?????
No.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5