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

Berhenti membuat SQL Server melakukan pekerjaan kotor Anda

Saya sering melihat "masalah" yang melibatkan persyaratan SQL Server untuk melakukan "pekerjaan kotor" seperti:

  • Di pemicu saya, saya perlu menyalin file ke/dari jaringan
  • Prosedur tersimpan saya memerlukan file FTP
  • Setelah pencadangan selesai, saya memerlukan SQL Server untuk meng-zip-nya, membuat salinan, lalu mengarsipkannya
  • Saat pelanggan ditambahkan, saya ingin membuat database baru, dan melakukan banyak hal di Active Directory
  • Pekerjaan Agen Server SQL saya perlu memindai direktori untuk mencari file, dan melakukan penyisipan massal saat menemukan yang baru

Ini bukan daftar yang lengkap; Saya mungkin bisa mengisi satu halaman. Intinya adalah bahwa melakukan tugas-tugas ini dari dalam SQL Server menghadirkan hambatan yang signifikan:

Keamanan

Biasanya, untuk apa pun di mana Anda menganggap SQL Server memerlukan sistem file atau akses tingkat OS lainnya, Anda akan (a) memberikan hak carte blanche eksplisit ke akun layanan SQL Server (dan/atau Agen SQL/akun proxy), atau (b) cukup setel akun layanan SQL Server untuk dijalankan sebagai akun domain yang sudah ada yang sudah memiliki semua hak tersebut. Ini adalah solusi "mudah" – sekarang, alih-alih memberikan akses satu per satu ke folder ini dan berbagi itu dan sumber daya lainnya, Anda cukup menghapus tangan Anda karena mereka sudah menjadi admin domain. Selanjutnya Anda mengaktifkan pengaturan tingkat server yang dinonaktifkan secara default tetapi menghalangi Anda untuk menyelesaikan satu atau beberapa tugas di atas (mis. xp_cmdshell ).

Saya tidak berpikir saya harus menjelaskan tingkat eksposur tindakan ini dapat mewakili. Atau masalah seperti apa yang dapat terjadi jika ini adalah akun karyawan yang sebenarnya, dan karyawan tersebut pergi – atau menentukan bahwa dia tidak puas sebelum mereka pergi. Astaga. Saya telah melihat beberapa kasus di mana akun umum digunakan untuk semua SQL Server. Coba tebak apa yang terjadi jika/ketika Anda perlu mengubah kata sandi untuk akun domain yang sedang digunakan secara aktif oleh puluhan atau ratusan contoh SQL Server? Tidak peduli seberapa sering hal itu akan terjadi jika Anda tidak mengecualikan pengguna itu dari kebijakan pengaturan ulang kata sandi?

Kinerja

Selain masalah keamanan, keluar dari server database dapat menyebabkan penundaan sementara SQL Server bergantung pada beberapa proses eksternal yang tidak dapat dikontrolnya. Apakah transaksi database benar-benar perlu menunggu file dikompresi dan disalin, atau transfer FTP selesai, atau pengontrol domain cadangan Anda merespons? Bagaimana senyawa ini ketika beberapa pengguna melakukan tugas serupa, semuanya bersaing untuk bandwidth dan/atau kepala disk yang sama? Anda juga harus mempertimbangkan bahwa setelah SQL Server memberi tahu beberapa file batch untuk melakukan sesuatu, lalu transaksi yang berisi dibatalkan, Anda tidak dapat mengembalikan tindakan eksternal.

Jawabannya

Biasanya – dan selalu ada pengecualian – jawabannya adalah dengan menggunakan proses eksternal untuk tugas-tugas ini yang benar-benar di luar SQL Server. Gunakan PowerShell, gunakan C#, gunakan file batch; heck, gunakan VBScript. Pikirkan tentang tugas mana yang benar-benar perlu ditangani *segera* dan saat transaksi masih aktif – saya kira tidak banyak. Buat tabel antrian untuk ini, dan tulis ke tabel antrian di dalam transaksi (yang akan dibatalkan jika transaksi tidak berhasil). Kemudian, memiliki tugas latar belakang atau skrip yang menggunakan baris dari tabel antrian, melakukan tugas terkait, dan menghapus atau menandai setiap baris sebagai selesai. Bonus tambahan:Agen SQL Server tidak diperlukan di sini, jadi Anda dapat menggunakan penjadwal perusahaan apa pun, dan metodologinya masih berfungsi dengan SQL Server Express.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengelompokan SQL berdasarkan bulan dan tahun

  2. Pernyataan SQL CASE:Apa itu dan apa cara terbaik untuk menggunakannya?

  3. Mengembalikan Parameter Prosedur Tersimpan atau Fungsi Buatan Pengguna di SQL Server (Contoh T-SQL)

  4. Sintaks salah di dekat 'GO'

  5. Buat Hubungan di SQL Server 2017