Group: microsoft.public.it.sql




Subject: Utenti trigger
From: Stefano
Date: 5/14/2007 8:17:28 AM
Ciao, ho un trigger che preleva i dati da una tabella nel database A (al quale appartengono diversi utenti) e li scrive in altra tabella nel database B (monoutente) Se l'utente che legge dal database A non è presente in B il trigger restituisce un errore. E' possibile ovviare in qualche modo oppure debbo necessariamente avere gli stessi utenti nei due db? Grazie. Ciao. Stefano.

Subject: Utenti trigger
From: Andrea Benedetti
Date: 5/14/2007 10:01:30 AM
Salve Stefano, "Stefano" <ormaiocc@tin.it> ha scritto nel messaggio news:U9T1i.45958$281.31510@tornado.fastwebnet.it... > Ciao, > ho un trigger che preleva i dati da una tabella nel database A (al quale > appartengono diversi utenti) e li scrive in altra tabella nel database B > (monoutente) > Se l'utente che legge dal database A non è presente in B il trigger > restituisce un errore. > E' possibile ovviare in qualche modo oppure debbo necessariamente avere > gli stessi utenti nei due db? Se utilizzi SQL Server 2005 puoi ricorrere alla clausola "EXECUTE AS" che ti permette di far eseguire il tuo codice all'interno di un differente contesto. Nel tuo caso hai anche bisogno di utilizzare, sul tuo database di partenza, l'impostazione SET TRUSTWORTHY ON perchè devi uscire dal contesto del tuo db. Attenzione che, per poter impostare questa proprietà sul database, devi avere diritti di tipo sysadmin. Prova a vedere questo (stupido) esempio: /* costruisco due db: A e B */ use master go create database A go create database B go /* creo un login, quindi un utente su A */ CREATE LOGIN [utenteA] WITH PASSWORD=N'utenteA', DEFAULT_DATABASE=[A], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF GO USE [A] GO CREATE USER [utenteA] FOR LOGIN [utenteA] EXEC sp_addrolemember N'db_owner', N'utenteA' GO /* costruisco, sia su A che su B una tabella di esempio */ use A go create table prova (colonna int) go use B go create table prova (colonna int) go /* creo su A un trigger di insert che vada a scrivere in B */ use A go create trigger tr_insert on prova for insert as begin insert B..prova select * from prova end go /* !!! mi collego come "utenteA" !!! */ insert prova values (1) /* Errore: The server principal "utenteA" is not able to access the database "B" under the current security context. */ /* !!! mi riconnetto come admin !!! */ USE master go ALTER DATABASE A SET TRUSTWORTHY ON go use a go drop trigger tr_insert go /* ricreo il trigger con la clausola "execute as" */ create trigger tr_insert on prova with execute as owner for insert as begin insert B..prova select * from prova end go /* mi collego come "utenteA"*/ insert prova values (2) /* faccio pulizia */ use master drop database A drop database B drop login utenteA go > Grazie. Ciao. Stefano. Ciao! -- Andrea Benedetti Microsoft MVP - SQL Server www.absistemi.it - www.ugiss.org http://blogs.ugidotnet.org/ab http://mvp.support.microsoft.com http://italy.mvps.org

Subject: Utenti trigger
From: Stefano
Date: 5/14/2007 10:17:36 AM
"Andrea Benedetti" <abenedetti@absistemi.it> ha scritto nel messaggio news:ujdeV4flHHA.1776@TK2MSFTNGP05.phx.gbl... > Salve Stefano, > Se utilizzi SQL Server 2005 puoi ricorrere alla clausola "EXECUTE AS" che > ti permette di far eseguire il tuo codice all'interno di un differente > contesto. Grazie per la risposta. Purtroppo utilizzo SqlServer 2k, è possibile anche con questa versione? Grazie. Ciao. Stefano.

Subject: Utenti trigger
From: Andrea Benedetti
Date: 5/14/2007 10:41:09 AM
Ciao Stefano, "Stefano" <ormaiocc@tin.it> ha scritto nel messaggio news:zWU1i.46080$281.22151@tornado.fastwebnet.it... > Grazie per la risposta. ;-) > Purtroppo utilizzo SqlServer 2k, è possibile anche con questa versione? SQL Server 2000 non ha la possibilità di modificare il contesto di esecuzione del codice. Potresti (non l'ho mai fatto, ma a naso direi che il giro potrebbe tornare) utilizzare un linked server. E quindi utilizzare questo all'interno del trigger. Per costruire un linked server puoi partire da qui: "Utilizzare Linked Server verso SQL Server" http://www.absistemi.it/tipsql.aspx?id=210 > Grazie. Ciao. Stefano. Ciao! -- Andrea Benedetti Microsoft MVP - SQL Server www.absistemi.it - www.ugiss.org http://blogs.ugidotnet.org/ab http://mvp.support.microsoft.com http://italy.mvps.org