sql >> Databasteknik >  >> RDS >> Sqlserver

sp_send_dbmail exekveras från jobbet misslyckas med frågeresultat bifogat som fil

Jag har kommit till lösningen av det problemet. Vet inte varför det skulle fungera men inte desto mindre. :)Det handlar definitivt om säkerhet.

Jag har undersökt att SQL Agent körs på uppdrag av domänanvändare, säg DOMAIN\User .Den har full uppsättning administratörsrättigheter på servern ('sysadmin' serverroll, etc). SQL Server själv körs under samma användare.

Steget i jobbet som innehåller anrop till sp_send_dbmail körs under samma DOMAIN\User .

Jag har också spårat att när du kör frågedelen av sp_send_dbmail den försöker köraexec xp_logininfo 'DOMAIN\User' för att kontrollera mot Active Directory om den användaren är OK. Och överraskning:något är definitivt inte OK. Denna kontroll slutar 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 viss sannolikhet betyda något om att användarens lösenord har upphört att gälla eller att användaren är låst eller andra obehagliga saker för den killen.

Jag bestämde mig för att det var för riskabelt att byta användare till Agent. Så jag kommer på att skicka e-post på uppdrag av 'sa' som har samma 'sysadmin'-serverroll men SQL-auktorisering och utelämnar detta AD-kontrollsteg.

Det ser ut som att en användare som utger sig för att vara admin ber den riktiga administratören att köra farlig kod åt honom :)

Så slutkoden för det här jobbet är det första och enda steget som liknar detta:

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. mysql_fetch_array hämtar inte alla rader

  2. dynamiskt tabellnamn i markören

  3. Cloud Vendor Deep-Dive:PostgreSQL på DigitalOcean

  4. MySQL vs MySQLi när du använder PHP