Keamanan untuk Pengembang Aplikasi yang melakukan pekerjaan PL / SQL di Oracle

13

Bagaimana Anda menangani kekurangan tingkat Skema di Oracle? Arsitektur keamanan Oracle bekerja dengan baik untuk aplikasi yang hanya membutuhkan hak-hak tingkat objek dan berfungsi dengan baik untuk DBA yang membutuhkan beberapa batasan. Namun, tampaknya ada lubang menganga besar dalam arsitektur untuk programmer melakukan pengembangan dengan aplikasi ujung depan dan PL / SQL dalam berbagai skema. Berikut adalah beberapa opsi saya dengan kelemahannya:

  1. Buat setiap programmer melakukan pengembangan dalam skema mereka sendiri. DBA akan memberikan hak tingkat objek untuk programmer yang membutuhkannya. Setiap pengembangan paket harus dilakukan oleh DBA. Kelemahan utama adalah bahwa pemrogram akan menggunakan basis data seperti sedikit ember untuk merugikan kinerja basis data. Saya ingin para programmer untuk mengembangkan dalam database, tetapi metode ini akan sangat mencegahnya.

  2. Berikan masing-masing programmer nama pengguna / kata sandi untuk selusin skema yang mereka butuhkan untuk melakukan pengembangan. Berikan izin skema aplikasi ini untuk membuat prosedur, tabel, dll. Beberapa kelemahan dengan pendekatan ini adalah bahwa programmer harus mempertahankan beberapa login dan jarang masuk sebagai diri mereka sendiri. Pengembangan lintas skema juga sulit.

  3. Berikan hak istimewa autentikasi proksi pemrogram pada setiap skema yang mereka perlukan untuk pengembangan. Ini membuat mereka tetap masuk sebagai diri mereka sendiri tanpa harus memberi mereka hak istimewa selain hak proxy. Kerugian termasuk programmer harus mempertahankan koneksi terpisah untuk setiap skema yang mereka proksi, pengembangan lintas skema lebih rumit karena koneksi harus terus berubah, dan paket yang menggunakan tautan basis data publik dengan otentikasi yang dilewati tidak akan dikompilasi di dalam koneksi proxy.

  4. Berikan masing-masing hak istimewa programmer DBA. - Kelemahan di sini adalah keamanan. Tidak ada pemrogram skema yang dapat dijauhkan dari skema apa pun dan pemrogram mana pun dapat menyamar sebagai pemrogram lainnya (DBA).

Tampaknya ada opsi yang hilang untuk memberikan masing-masing programmer SELECT / INSERT / CREATE / etc. hak istimewa pada skema yang mereka perlukan untuk melakukan pengembangan. Mereka masuk sebagai diri mereka sendiri untuk melakukan pekerjaan mereka menggunakan satu koneksi. Objek baru dalam skema yang dapat diakses langsung tersedia.

Apakah saya melewatkan sesuatu? Bagaimana Anda menangani pemrogram aplikasi yang melakukan pengembangan PL / SQL?

Leigh Riffel
sumber
3
+1 pertanyaan besar - ini, ditambah dengan kurangnya kontrol sumber terintegrasi, adalah masalah utama dengan Oracle di lingkungan multi-pengembang.
ScottCher

Jawaban:

11

Kembali pada hari-hari ketika saya bekerja di toko Oracle, kami memiliki server khusus 'dev' (pengembangan), yang memiliki batasan keamanan yang berbeda dari server 'prod' (produksi). Pengembang dapat melakukan apa pun yang mereka butuhkan, dan kemudian kami akan menyerahkan skrip yang diperlukan ke DBA untuk diterapkan ke server produksi.

Dalam hal sistem kritis kami (SCT Banner, untuk kelas pelacakan & siswa, dan Oracle Financials), ada juga server 'test' dan 'seed'. Tes untuk pengujian penerimaan pengguna sebelum barang dimigrasi dari dev ke prod; 'seed' adalah instalasi perangkat lunak, jadi jika kita menemukan bug, kita dapat memverifikasi apakah itu sesuatu yang telah kita perkenalkan atau berasal dari perangkat lunak SCT atau Oracle.

Joe
sumber
+1 Dengan basis data penggunaan umum kami, pengembang bekerja pada proyek yang sangat beragam, sehingga prinsip privilege paling tidak akan memberi mereka akses lengkap bahkan ke server pengembangan. ( en.wikipedia.org/wiki/Principle_of_least_privilege )
Leigh Riffel
@Leigh - Saya mungkin harus mengklarifikasi ... server dev jatuh di bawah apa yang Anda miliki sebagai # 1 untuk sebagian besar, bukan # 4
Joe
1
Saya ingat memiliki database DEV yang dikloning dari Production, kemudian hibah yang rumit untuk memungkinkan pengembang bekerja tanpa batasan. Pada akhirnya, lebih mudah untuk memberikan masing-masing pengembang database dan akses DBA mereka sendiri. Maka akan memberi makan perubahan ke Dev melalui siklus rilis. Seharusnya sekarang lebih mudah dengan virtualisasi.
Sumnibot
@Sumnibot - Lebih mudah menginstal, memelihara, mencadangkan, dll. Basis data terpisah untuk setiap pengembang daripada memberi mereka izin!?! Selain waktu yang diperlukan untuk menjaga masing-masing tetap up to date, sepertinya biaya lisensi akan cukup besar atau Anda tidak memberi mereka versi perusahaan?
Leigh Riffel
1
Tidak mengandung jawaban konkret untuk saya.
Michael-O
3

Gunakan peran untuk mengaitkan koleksi objek, lalu berikan akses ke peran

The GRANT pernyataan memungkinkan DBA untuk:

Hak istimewa objek untuk objek tertentu untuk pengguna, peran, dan PUBLIC. Tabel 18-2 mencantumkan hak istimewa objek dan operasi yang mereka otorisasi.

Karena hak objek dapat diberikan ke peran, relatif mudah untuk memberikan akses peran ke semua tabel dalam skema:

sql> spool privs.sql
sql> pilih 'hibah pilih di scott.' || table_name || ' ke role_select; ' dari dba_tables where owner = 'SCOTT';
sql> @ privs.sql
sql> beri role_select ke john, sam, peter;

Ini, dikombinasikan dengan GRANT CREATE TABLEdikeluarkan oleh pengguna-skema yang sesuai untuk peran berarti bahwa pengembang dapat memilih dan membuat tabel. Itu tidak sempurna karena tabel yang dibuat mengharuskan skrip dijalankan lagi, tetapi WITH GRANT OPTIONmenyarankan agar setiap pengembang kemudian dapat memberikan akses ke tabel yang mereka buat untuk peran yang sesuai.

Ini menunjukkan bahwa Anda dapat membuat pemicu tingkat DDL yang dapat menjalankan proses pemberian yang sesuai, meskipun sejumlah besar pengujian jelas akan diperlukan, seharusnya memungkinkan untuk membuat pernyataan tabel buat secara otomatis memberikan izin yang sesuai ke peran yang sesuai.

Edit -

Menurut GRANT , CREATE TABLEhak istimewa:

Buat tabel dalam skema penerima.

Jadi, dengan memberi mereka buat tabel, ubah tabel, dll. Dari pengguna yang benar, mereka harus dapat mengakses skema pengguna itu seolah-olah mereka adalah pengguna yang tepat.

Brian Ballsun-Stanton
sumber
Saya telah melihat metodologi yang Anda coba rujuk tanpa banyak keberhasilan; namun, saya yakin Anda benar bahwa itu dapat dilakukan dengan pengujian ekstensif. Masalahnya adalah ini hanya memungkinkan pengembang memilih akses pada tabel. Pemberian membuat tabel secara langsung atau melalui peran hanya memberi mereka membuat hak istimewa tabel pada skema mereka sendiri. Mereka masih tidak dapat membuat tabel, prosedur, paket, pemicu atau objek lain dalam skema apa pun kecuali skema mereka sendiri, atau apakah maksud Anda bahwa mereka seharusnya hanya membuat objek dalam skema mereka sendiri bahkan saat pengembangan?
Leigh Riffel
@Tinggi Diperbarui dengan detail.
Brian Ballsun-Stanton
Ini bukan cara kerja Oracle. Coba ini: buat pengguna u1 diidentifikasi oleh "ThisIsMy1Password"; buat pengguna u2 yang diidentifikasi oleh "ThisIsMy1Password"; berikan dba kepada u1; hibah terhubung ke u2; sambungkan u1 / "ThisIsMy1Password" @db; berikan tabel buat untuk u2; hubungkan u2 / "ThisIsMy1Password" @db; buat tabel u1.t1 (c1 varchar2 (10)); Langkah terakhir gagal dengan hak istimewa yang tidak memadai.
Leigh Riffel