Vēsturiski esmu pieradis izmantot komandu SetUser. Lai to izpildītu jābūt sysadmin lomai piederošam, vai arī attiecīgajā datu bāzē jābūt db_owner grupai piederošam. Paveikt to ir pavisam vienkārši:
-- šajā vietā vēl esmu es patsOriginal_Login funkcija atgriezīs manu īsto pieslēgšanās vārdu.
setuser 'Liene'
-- te esmu Liene
select suser_sname(), original_login()
-- tagad gribu būt atpakaļ es pats, tādēļ nākamā komanda:
setuser
-- un šeit esmu atkal es pats
select suser_sname(), original_login()
Bet vēsturiskais pieradums jālabo uz labāku stilu, un tad ir jāizmanto Execute As.
-- šajā vietā vēl esmu es patsExecute As ir jaudīga iespēja, jāņem vērā vairākas nianses. Piemēram, Execute as User darbojas datu bāzes ietvaros, kamēr Execute as Login darbojas servera ietvaros.
Execute As Login = 'Liene'
-- te esmu Liene
select suser_sname(), original_login()
-- tagad gribu būt atpakaļ es pats
Revert
-- un šeit esmu atkal es pats, tādēļ nākamā komanda:
select suser_sname(), original_login()
Tad vēl dažas piezīmes:
* Execute As šiet ir apskatīts tikai viens pielietojums. Praksē šis tiek izmantots arī citiem nolūkiem (piemēram, var paskatīt rakstu Datu drošība divu datu bāzu gadījumā vai Pieteikšanās (logon) trigeri).
* Is_Memeber strādā pavisam interesanti ja lietotājs pieder lomai sysadmin.
* Neliela piezīme par SetUser. 99.99% gadījumos setuser strādā lieliski, bet man bija gadījums, kad vaicājums saturēja linkoto serveri un vaicājums lamājās pēc setuser. Savukārt pieslēdzoties kā konkrētajam lietotājam (neizmantojot setuser) strādāja viss lieliski. Iemeslu nesapratu :( un arī nepamēģināju, vai līdzīgi būtu ar Execute As.
Nav komentāru:
Ierakstīt komentāru