sql >> Database teknologi >  >> RDS >> Sqlserver

sp_send_dbmail udført fra job mislykkes med forespørgselsresultat vedhæftet som fil

Jeg er kommet til at løse problemet. Ved ikke hvorfor det skulle virke men ikke desto mindre. :)Det handler bestemt om sikkerhed.

Jeg har undersøgt, at SQL Agent kører på vegne af domænebrugeren, f.eks. DOMÆNE\Bruger .Den har et komplet sæt administratorrettigheder på serveren ('sysadmin' serverrolle osv.). SQL Server selv kører under den samme bruger.

Jobtrinnet, der indeholder opkald til sp_send_dbmail kører under det samme DOMÆNE\Bruger .

Jeg har også sporet, at når du kører forespørgselsdelen af ​​sp_send_dbmail den forsøger at udføreexec xp_logininfo 'DOMAIN\User' for at tjekke mod Active Directory, om denne bruger er OK. Og overraskelse:noget er bestemt ikke OK. Denne kontrol ender med:

Msg 15404, Level 16, State 19, Server SQLC002INS02\SQLC002INS02, Line 1
Could not obtain information about Windows NT group/user 'DOMAIN\User.', error code 0x2.

Det kan med en vis sandsynlighed betyde noget om, at brugerens adgangskode er udløbet, eller brugeren er låst eller andre ikke behagelige ting for den fyr.

Jeg besluttede, at det var for risikabelt at skifte bruger til agent. Så jeg kommer op til at sende mail på vegne af 'sa', som har samme 'sysadmin'-serverrolle men SQL-autorisation og udelader dette AD-kontroltrin.

Det ligner en bruger, der udgiver sig for at være administrator for at bede den rigtige administrator om at køre farlig kode for ham :)

Så den sidste kode for dette job er det første og eneste trin, der ligner dette:

execute as login = 'sa'
exec msdb.dbo.sp_send_dbmail 
    @profile_name = 'profile_name', 
    @recipients  = '[email protected]',
    @body = 'body',
    @subject = 'subj',
    --Parameters that refers to attached file
    @attach_query_result_as_file = 1, 
    @query_result_header = 0,
    @query_result_no_padding = 1,
    @query = 'select 1',
    @query_attachment_filename = 'test.csv'
revert


  1. Forståelse af systemkolonner i PostgreSQL

  2. PHP7.0-FPM med Docker:Kan ikke indlæse dynamisk bibliotek OCI8

  3. Sorter tidsstempler (inklusive fremtid) efter absolut afstand fra nu

  4. Opbygning af Android-app til at køre PHP og MySQL på Android-tablet