Welcome to Sign in | Help
in Search

impersonare user /login din trigger

Last post 10-06-2007, 1:43 PM by crestinul. 9 replies.
Sort Posts: Previous Next
  •  10-05-2007, 12:48 PM 2862

    impersonare user /login din trigger

    Am urmatorul trigger :

    LTER TRIGGER [dbo].[sendinserturi]

    ON [dbo].[tbl_boy]

    AFTER INSERT

    AS

    BEGIN

    declare @dialoghandle uniqueidentifier

    declare @inserturi xml

    set @inserturi=(select * from inserted for xml raw('boy'),root('boys'))

    -- SET NOCOUNT ON added to prevent extra result sets from

    -- interfering with SELECT statements.

    SET NOCOUNT ON;

    --GRANT IMPERSONATE ON user :: dbo TO gigel

    execute as user='gigel'

    begin dialog conversation @dialoghandle from service sender to service 'receptor' on contract repl1 WITH ENCRYPTION = Off

    -- Insert statements for trigger here

    ;send on conversation @dialoghandle message type insertie(@inserturi)

    revert

    END

    Eu vreau ca instructiunea send sa se execute in contextul de securitate a userului gigel

    AM dat drept de impersonare pt userul gigel de catre dbo astfel:

    GRANT IMPERSONATE ON user :: dbo TO gigel

    Totusi cand se executa triggeru imi zice ca principal gigel nu exista nu poate fi impersonat sau nu am permisiuni.

    Aveti idee cum pot fixa asta?

    Multumesc


    Secolul XXI ori va fi religios ori nu va fi deloc
  •  10-05-2007, 2:39 PM 2863 in reply to 2862

    Re: impersonare user /login din trigger

    Dacă vrei să îi dai user-ului X dreptul să îl impersoneze pe Y, atunci scrii "GRANT IMPERSONATE ON user::Y TO X", nu "GRANT IMPERSONATE ON user::X TO Y".

    Pe de altă parte, nu prea are rost să-i dăm vreun drept lui dbo, pentru că el oricum îl are, fiind owner-ul bazei de date.

    Am încercat să reproduc fenomenul (făcând abstracţie de partea de service broker) şi nu am reuşit: se execută fără nicio eroare. La ce instrucţiune apare eroarea la tine (la cea cu EXECUTE AS sau la cea cu BEGIN DIALOG) ? Care e mesajul exact de eroare ? Care este user-ul care execută INSERT-ul ?

    Răzvan
  •  10-05-2007, 2:47 PM 2864 in reply to 2863

    Re: impersonare user /login din trigger

    la execute as ,daca stau si ma gandesc bine nu ar fi o solutie pt ca triggerul se executa ,in contextul de securite ca userului care face insertul-cred nu si ca dbo ar trebui sa fac impersonarea din cod explicit pt userul care face insert ceva de genu grant impersonate on user::gigel to caller ,cred o sa incerc asa

    Multumesc mult


    Secolul XXI ori va fi religios ori nu va fi deloc
  •  10-05-2007, 4:04 PM 2865 in reply to 2864

    Re: impersonare user /login din trigger

    Într-adevăr, "GRANT IMPERSONATE ON USER::gigel TO caller", ar fi o soluţie, însă nu cea mai bună. Problema e că astfel îi dai voie lui caller să facă tot ceea ce poate face gigel (de exemplu, inclusiv să trimită mesaje direct, fără să le scrie în tabelă). Mai bine ar fi să faci astfel:

    ALTER TRIGGER dbo.SendInserturi
    ON dbo.tbl_boy
    WITH EXECUTE AS 'gigel'
    AFTER INSERT
    AS
    BEGIN
     ...
    END

    Astfel, dacă folosim clauza EXECUTE AS în loc de instrucţiunea EXECUTE AS, dreptul de impersonare trebuie să fie deţinut de cel care creează trigger-ul, nu de cel care execută insert-ul (iar, după cum spuneam, dbo are deja dreptul să impersoneze pe oricine).

    Răzvan

  •  10-05-2007, 5:16 PM 2866 in reply to 2865

    Re: impersonare user /login din trigger

    merci am pus linia aia in trigger si am obtinut asta

    Msg 15517, Level 16, State 1, Procedure sendinserturi, Line 26

    Cannot execute as the database principal because the principal "gigel" does not exist, this type of principal cannot be impersonated, or you do not have permission.

    Mai trebuie sa fac ceva cu principalul asta se pare da nush ce deocamdataTongue Tied


    Secolul XXI ori va fi religios ori nu va fi deloc
  •  10-05-2007, 5:56 PM 2867 in reply to 2866

    Re: impersonare user /login din trigger

    Cred că la linia 26 din trigger e altceva... eu ziceam să scoţi EXECUTE AS-ul din corpul trigger-ului şi să-l laşi doar la început. Cum arată acum trigger-ul ?

    Răzvan
     

  •  10-05-2007, 7:07 PM 2868 in reply to 2867

    Re: impersonare user /login din trigger

    ALTER TRIGGER [dbo].[sendinserturi]

    ON [dbo].[tbl_boy]

    WITH EXECUTE AS 'gigel'

    AFTER INSERT

    AS

    BEGIN

    declare @dialoghandle uniqueidentifier

    declare @inserturi xml

    set @inserturi=(select * from inserted for xml raw('boy'),root('boys'))

    -- SET NOCOUNT ON added to prevent extra result sets from

    -- interfering with SELECT statements.

    SET NOCOUNT ON;

    --GRANT IMPERSONATE ON user :: dbo TO gigel

    begin dialog conversation @dialoghandle from service sender to service 'receptor' on contract repl1 WITH ENCRYPTION = Off

    -- Insert statements for trigger here

    ;send on conversation @dialoghandle message type insertie(@inserturi)

    END


    Secolul XXI ori va fi religios ori nu va fi deloc
  •  10-05-2007, 7:26 PM 2869 in reply to 2868

    Re: impersonare user /login din trigger

    Deci acum îţi dă tot eroarea:

    Msg 15517, Level 16, State 1, Procedure sendinserturi, Line 26

    Cannot execute as the database principal because the principal "gigel" does not exist, this type of principal cannot be impersonated, or you do not have permission.

    la aceeaşi linie, 26 ? ... şi eroarea asta când ţi-o dă: atunci când execuţi insert-ul sau când vrei să modifici trigger-ul ? Dacă ţi-o dă când vrei să modifici trigger-ul, cu ce user încerci să-l modifici ? Ce permisiuni are acest user ?

    Răzvan

  •  10-05-2007, 8:04 PM 2870 in reply to 2869

    Re: impersonare user /login din trigger

    la alter trigger da

    e un user de windows

    in baza de date am bifat toate rolurile pt el si tot nu merge


    Secolul XXI ori va fi religios ori nu va fi deloc
  •  10-06-2007, 1:43 PM 2873 in reply to 2870

    Re: impersonare user /login din trigger

    CRED ca problema e ca loginul userului e creat dintr-un certificat .AM pus in loc de gigel un user normal si a mers,insa eu vreau ca triggeru sa ruleze in contextul de securitate a userului gigel,creat din certificat tocmai pt securizarea conexiunii sb
    Secolul XXI ori va fi religios ori nu va fi deloc
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems