Kami memiliki situasi di mana Pengembang tidak memiliki UPDATE
izin apa pun , TETAPI mereka bekerja dengan aplikasi dan melihat string koneksi -> mereka tahu kata sandi dari beberapa akun SQL (contoh SQLLogin1
) yang memiliki izin UPDATE. Operasi kami saat ini tidak sempurna, dan terkadang data produksi perlu dimodifikasi (belum ada GUI untuk itu).
Alih-alih menghubungi DBA, dan memintanya untuk mengubah data, Pengembang akan (secara tidak benar) menggunakan akun SQL SQLLogin1
(yang memiliki izin untuk memodifikasi data), dan terhubung melalui SQL Server Management Studio untuk memodifikasi data sendiri.
DBA tidak dapat mengubah kata sandi untuk SQLLogin1
tanpa Pengembang melihat string koneksi baru dan kata sandi baru, karena string koneksi aplikasi yang digunakan SQLLogin1
dikelola oleh Pengembang.
Pertanyaan:
Apakah ada cara untuk menolak akses ke SQLLogin1
login SQL, tetapi hanya jika terhubung melalui SSMS?
Pada saat yang sama jika SQLLogin1
terhubung .Net SqlClient Data Provider
( program_name
di sys.dm_exec_sessions
), itu harus diizinkan masuk.
Dengan cara ini kami ingin agar Pengembang tidak terhubung menggunakan SSMS SQLLogin1
, sementara aplikasi yang menggunakan SQLLogin1
, masih dapat terhubung.
sumber
Saya pikir tidak ada solusi yang dapat diandalkan untuk masalah Anda karena
Application Name
dapat dimodifikasiparameter
agar cam diubah oleh pengguna mana pun.Berikut ini cara mengubahnya
SSMS
:Dalam
Connect to Database Object
dialog pilih Opsi, bukaAdditional Connection Parameters
dan pilih nama untukApplication Name
seperti ini:Sekarang
sys.dm_exec_sessions
DMV dan Program_name () akan menunjukkan kepada Anda apa yang Anda berikan dalam string koneksi Anda diApplication Name
parameter:sumber
Anda tidak dapat memotong klien tertentu, seperti yang sudah dirinci dalam jawaban lainnya.
Solusinya adalah dengan menghapus hak akses ke sistem produksi dari akun pengembang.
Setiap perubahan harus ditulis dan dba akan menjalankan skrip.
Penempatan dilakukan oleh sysadmin; devs menghasilkan paket yang mereka berikan kepada seseorang dengan hak istimewa yang layak dan devs tidak pernah melihat konfigurasi yang digunakan pada sistem produksi.
Debugging disusun berdasarkan kasus per kasus dengan salinan data produksi dalam lingkungan pementasan sebagai solusi pilihan atau akun sementara dengan hak istimewa terbatas jika diperlukan.
sumber
Dalam arti ideal, ini adalah masalah proses / kebijakan / manajemen. Bahkan jika seseorang mengetahui kata sandi, jika itu melanggar kebijakan perusahaan untuk siapa pun kecuali DBA untuk terhubung ke Produksi (well, Anda mungkin memiliki tim Release Engineering dan / atau sys admin, dll), dan ada hukuman karena melanggar aturan, maka itu harus memadai (dengan asumsi bahwa aturan tersebut ditegakkan).
Mencoba mencegah aplikasi tertentu agar tidak terhubung tidak mungkin. Seperti yang ditunjukkan oleh sepupic , cukup mudah untuk mengubah "nama program". Tetapi bahkan jika pengembang tidak dapat mengetahuinya, ada banyak program lain yang dapat terhubung ke SQL Server. Kebanyakan orang akan memiliki akses ke SQLCMD.exe dan bahkan OSQL.exe yang sudah usang . Pengembang dapat terhubung dari dalam Visual Studio, dan mereka bahkan dapat membuat aplikasi mereka sendiri untuk terhubung melalui ". Penyedia Data SqlClient Net". Oh, dan sekarang kami bahkan memiliki Azure Data Studio. Terlalu banyak.
Namun, ini mungkin masih mungkin terjadi jika kita mendekatinya dari arah lain: alih-alih mencegah aplikasi X dari menghubungkan, bagaimana kalau hanya memungkinkan aplikasi Y untuk terhubung? Tentu, kita kembali masuk ke "nama program", dan bahkan "nama host" dapat dipalsukan, TETAPI, saya cukup yakin bahwa Alamat IP klien tidak dapat dipalsukan (setidaknya tidak melalui kata kunci string koneksi). Anda tahu Alamat IP server aplikasi, atau dapat dengan mudah menemukannya dari
sys.dm_exec_connections
DMV (diclient_net_address
bidang).Dimulai dengan Pemicu Logon yang disarankan oleh EzLo , kita dapat memodifikasi logika yang menentukan apakah koneksi valid atau tidak menjadi sebagai berikut:
Satu-satunya cara sekarang adalah dengan masuk ke mesin Produksi, atau meminta workstation mereka memprotes IP dari server aplikasi. Semoga para devs tidak memiliki akses untuk masuk ke Produksi. Dan spoofing IP yang ada di jaringan menyebabkan masalah yang dapat mempengaruhi Produksi, sehingga mereka tidak akan mencobanya, kan? Baik?
sumber
Saya sebelumnya bekerja untuk perusahaan yang memiliki masalah ini dengan satu pengembang. Dia dipecat, tetapi kami juga menerapkan tabel yang memiliki LoginName dan DiizinkanMesin (Server Aplikasi) melalui Pemicu Login. Ini menyelesaikan masalah kami. Atau mungkin itu karena penembakan.
sumber