Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

sp_send_dbmail dieksekusi dari pekerjaan gagal dengan hasil kueri terlampir sebagai file

Saya telah datang untuk mengatasi masalah itu. Tidak tahu mengapa itu akan berhasil tetapi tidak pernah kurang. :) Ini jelas tentang keamanan.

Saya telah menyelidiki bahwa SQL Agent berjalan atas nama pengguna domain, katakanlah DOMAIN\User Ini memiliki set lengkap hak admin di server (peran server 'sysadmin', dll). SQL Server sendiri berjalan di bawah pengguna yang sama.

Langkah pekerjaan yang berisi panggilan ke sp_send_dbmail berjalan di bawah DOMAIN\User same yang sama .

Saya juga telah melacaknya saat menjalankan bagian kueri sp_send_dbmail ia mencoba menjalankanexec xp_logininfo 'DOMAIN\User' untuk memeriksa terhadap Active Directory jika pengguna itu OK. Dan kejutan:pasti ada sesuatu yang tidak beres. Pemeriksaan ini berakhir dengan:

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.

Itu, dengan beberapa kemungkinan dapat berarti apa pun tentang kata sandi pengguna itu kedaluwarsa atau pengguna terkunci atau hal-hal tidak menyenangkan lainnya untuk orang itu.

Saya memutuskan bahwa itu berisiko untuk mengubah pengguna untuk Agen. Jadi saya datang untuk mengirim email atas nama 'sa' yang memiliki peran server 'sysadmin' yang sama tetapi otorisasi SQL dan menghilangkan langkah pemeriksaan AD ini.

Sepertinya salah satu pengguna yang berpura-pura menjadi admin meminta admin yang sebenarnya untuk menjalankan kode berbahaya untuknya :)

Jadi kode terakhir dari pekerjaan ini adalah yang pertama dan satu-satunya langkah yang menyerupai ini:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dapatkan perbedaan waktu antara kelompok catatan

  2. Permintaan sql untuk tabel pohon

  3. Tanda kurung kurawal di T-SQL

  4. Cara Menggunakan Operator ANTARA di SQL Server

  5. 4 Cara Mendapatkan Daftar Jadwal di SQL Server Agent (T-SQL)