După câte înţeleg vreţi ca utilizatorii să se conecteze la baza de date cu Integrated Security, însă doriţi să aibă drepturi în bazele de date doar dacă se conectează folosind programul dvs. În caz că folosesc un alt program, doriţi să nu aibă acces (deşi folosesc aceleaşi conturi de utilizatori, tot cu Integrated Security). O soluţie (A) ar fi application roles, iar o altă soluţie (B) ar fi un logon trigger care verifică APP_NAME(). Voi detalia puţin fiecare din aceste soluţii:
(A) dacă vrem să folosim soluţia cu application role, atunci login-urile asociate acelor utilizatori (sau login-ul asociat grupului de utilizatori) nu va avea niciun fel de drept de a citi sau scrie în bazele de date, ci doar dreptul de login. Creem un application role cu o parolă care să fie hard-coded în aplicaţie şi îi dăm acestui application role toate drepturile de care are nevoie. Când aplicaţia deschide o conexiune, execută sp_setapprole cu parola hard-coded şi astfel va avea acces la date.
Problema la această soluţie este că cineva ar putea să decompileze aplicaţia şi să afle parola hard-coded.
(B) dacă vrem să folosim soluţia cu logon triggers, atunci dăm toate drepturile utilizatorilor respectivi, dar facem un trigger de logon care să dea eroare şi să facă ROLLBACK (anulând astfel conexiunea respectivă) în caz că APP_NAME() nu conţine numele aplicaţiei noastre.
Problema la această soluţie este că cineva ar putea să se conecteze dintr-o altă aplicaţie, modificând string-ul de conectare ca să conţină numele aplicaţiei noastre.
De fapt, ideea este că dvs doriţi ca baza de date să autentifice aplicaţia (nu utilizatorul care se conectează), ceea ce nu prea este posibil. Pentru a fi 100% sigur, ar trebui să existe o modalitate prin care server-ul să verifice semnătura digitală a aplicaţiei, iar o asemenea infrastructură nu există. Vezi răspunsurile lui Raul Garcia din următorul thread:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=790497&SiteID=1Răzvan