Haruskah pengembang dapat meminta basis data produksi?


162

Haruskah pengembang diberikan izin untuk query ( SELECT/ hanya baca) database produksi? Tempat saya sebelumnya bekerja, tim pengembangan memiliki db_datareaderperan; tempat saya bekerja sekarang tim pengembangan bahkan tidak dapat terhubung ke instance produksi.

Salah satu contoh pengujian adalah salinan produksi yang dipulihkan dari cadangan produksi seminggu sekali, sehingga tidak ada masalah dengan pengembang yang benar-benar melihat data.

Apa alasan bagus untuk tidak mengizinkan pengembang untuk meminta produksi (kecuali untuk hanya tidak ingin mereka memiliki akses untuk membaca data sensitif)?


25
Pertama, beri tahu kami mengapa pengembang ingin terhubung ke produksi.
Nick Chammas

6
Saya mencoba menyelidiki masalah produksi. Data yang relevan dimuat ke dalam produksi hari ini dan belum dalam contoh uji (di mana saya memiliki akses).
Tom Hunter

Jawaban:


152

Itu sangat tergantung pada apakah pengembang memiliki tanggung jawab dukungan. Jika mereka berada di hook untuk dukungan lini ketiga maka mereka mungkin perlu melihat pada database produksi untuk melakukan ini.

Secara umum itu adalah ide yang buruk untuk melakukan sesuatu pada server produksi kecuali jika benar-benar diperlukan untuk melakukannya di sana.

Untuk sebagian besar tujuan pengembangan, mirror atau snapshots dari database produksi akan memadai, dan mungkin lebih baik daripada database produksi langsung. Jika Anda melakukan sesuatu yang melibatkan integrasi maka Anda akan menginginkan lingkungan basis data yang stabil di mana Anda dapat mengontrol apa yang ada di dalamnya. Apa pun yang melibatkan rekonsiliasi juga membutuhkan kemampuan untuk melihat titik waktu yang terkendali.

Jika masalahnya adalah Anda tidak memiliki lingkungan mirror produksi atau sarana apa pun untuk menempatkan salinan data produksi di suatu tempat untuk pengembang Anda maka ini adalah pertanyaan yang agak berbeda. Dalam hal ini pengembang Anda benar-benar membutuhkan setidaknya satu lingkungan cermin. Jika Anda tidak dapat melihat apa masalahnya di data, maka agak sulit untuk memecahkannya.


57
+1 untuk Generally it's a bad idea to do anything on a production server unless it's really necessary to do it there.Beban pembuktian (untuk berbicara) harus pada membenarkan pemberian akses, tidak membenarkan menyangkal itu.
JNK

135

Tidak.

Pengembang tidak boleh memiliki akses ke sistem basis data produksi karena alasan berikut:

  1. Ketersediaan dan Kinerja : Memiliki hak baca-saja ke basis data tidak berbahaya. Kueri yang ditulis dengan buruk dapat:

    1. Mengunci tabel, memblokir proses penting lainnya.
    2. Sampah cache data Anda, memaksa proses lain untuk membaca kembali data dari disk.
    3. Pajak lapisan penyimpanan Anda, berdampak pada layanan lain yang berbagi penyimpanan itu.
  2. Keamanan : Basis data produksi Anda mungkin berisi informasi sensitif seperti:

    • kata sandi hash
    • informasi penagihan
    • informasi pengenal pribadi lainnya

    Hanya mereka yang benar-benar membutuhkan akses ke informasi ini yang harus memilikinya. Di perusahaan yang terorganisasi dengan baik, pengembang tidak termasuk di antara mereka. Selain itu, perusahaan Anda akan gagal memenuhi PCI dan SOX jika pengembangnya dapat mengakses sistem produksi dengan data ini.

    Alasannya jelas. Pekerjaan pengembangan pengembang melewati banyak tangan sebelum ditayangkan. Apa yang menghentikan pengembang jahat dengan akses produksi langsung dari mencuri data produksi Anda atau membuat database langsung Anda bertekuk lutut?

    "Tapi itu juga berlaku untuk DBA! Mereka bisa melakukan itu!" Persis. Anda ingin pengguna super sesedikit mungkin secara bertanggung jawab.

Iya.

Pengembang harus memiliki akses ke sistem produksi.

Di perusahaan saya, kami memiliki empat tim yang berurusan dengan basis data produksi. Mereka adalah:

  1. Pengembang , yang merancang dan menulis skema dan kode untuk basis data. Mereka tidak memiliki akses ke database dalam produksi. Namun, mereka terkadang duduk bersama Administrator atau mendukung orang dan membantu mereka melihat sesuatu secara langsung.
  2. Administrator , yang menyebarkan, memantau, dan mengelola basis data dalam produksi.
  3. Mendukung orang-orang , yang menyelidiki masalah produksi yang sensitif terhadap waktu dan memberikan umpan balik kepada para pengembang sehingga mereka dapat mengembangkan perbaikan.
  4. Orang-orang Business Intelligence , yang mengekstrak data dari basis data produksi menggunakan salinan basis data yang disegarkan secara berkala atau ekstrak yang ditulis dengan cermat dan QA-ed (biasanya dirancang oleh Administrator).

Sangat tepat untuk memberikan akses produksi pengembang Anda ketika Anda memiliki kekurangan tertentu di grup lain ini.

Sebagai contoh:

  • Anda tidak memiliki tim pendukung. Siapa yang akan tahu ke mana harus mencari untuk men-debug masalah produksi yang sensitif terhadap waktu? Pengembang Anda. Beri mereka akses " pecahkan gelas ".
  • Anda tidak memiliki tim BI. Admin Anda tidak memiliki atau ingin melakukan apa pun dengan laporan atau ekstrak. Siapa yang akan memecahkan masalah laporan yang dilihat eksekutif Anda setiap pagi? Pengembang Anda. Berikan mereka akses terbatas untuk men-debug laporan dan ekstrak ini.
  • Anda tidak memiliki tim admin. Anda berada di perusahaan yang sangat kecil atau pemula, jadi ucapkan halo pada "DBA yang tidak disengaja". Pengembang Anda berfungsi ganda sebagai administrator Anda, dan karenanya memerlukan akses penuh ke produksi.

78

Kinerja akan menjadi alasan BESAR.

Hanya karena mereka tidak dapat mengubah data tidak berarti mereka tidak dapat mempengaruhi server. Permintaan yang ditulis dengan buruk dapat membuat lingkungan produksi bertekuk lutut, dan berpotensi menyebabkan masalah lain (seperti kelebihan tempdb):

SELECT *
FROM BigTable A, OtherBigTable B
ORDER BY Somecolumn

Itu resep untuk bencana. Perhatikan bahwa ini adalah produk kartesius dengan pesanan oleh, yang berarti akan diurutkan dalam tempDB.


33

Prinsipnya adalah "privilege paling" dan "perlu tahu": apakah pengembang lulus tes ini?
Terutama ketika Auditor atau Sarbannes-Oxley datang mengetuk.

Kemudian, asumsi saya selanjutnya: pengembang itu bodoh. Jadi, jika mereka perlu mengatakan dukungan baris ke-3, yang kemudian membutuhkannya? Monyet web biasanya tidak tetapi tipe database ya jika mereka diharapkan untuk mendukungnya.

Lalu, apakah akses diperlukan secara permanen? Mereka dapat memiliki akses "memecahkan kaca" menggunakan login SQL atau akun Windows alternatif yang memerlukan sign off. Dalam kasus kami, pemilik data (semoga pengusaha yang mengerti teknologi) dan manajer TI yang menyetujuinya.

Saya telah melihat pengembang menguji atau menjalankan kueri pada produksi dan menghapusnya karena ketidaktahuan. Mengatakan itu, pengembang harus bertanggung jawab atas tindakan mereka: jika mereka menurunkan server, mereka harus menderita karenanya. Saya mendapati seseorang diturunkan setelah satu kejadian ...

Ini mengasumsikan toko yang cukup besar tentu saja. Semakin banyak topi yang dikenakan orang, semakin sedikit pemisahan tugas yang dapat Anda miliki

Juga, apakah ada lingkungan yang pengembang dapat menjalankan kueri terhadap data terbaru? Di toko terakhir saya, prod dikembalikan setiap malam ke server uji untuk menyediakan ini.


20

Saya pikir jawabannya adalah, seperti halnya dengan banyak hal IT, "itu tergantung".

Basis data ERP besar dengan banyak informasi perusahaan dan pelanggan yang sensitif? Mungkin tidak (baik karena alasan keamanan dan kinerja).

Basis data departemen 5 MB dengan front-end Access yang melacak kontribusi ke dana donat dan pizza? Tidak akan membuat banyak perbedaan, setidaknya untuk akses read-only.

Memang, contoh pertama jauh lebih umum daripada yang kedua, tetapi ini adalah perbedaan yang harus Anda ketahui jika Anda bertanggung jawab untuk membuat keputusan kebijakan jenis ini. Namun di sisi lain, sungguh menakjubkan betapa cepatnya basis data donat-dan-pizza-dana 5 MB dapat memperluas cakupannya menjadi 50-part part / pelanggan-kartu kredit-angka / siapa-tahu-apa- database lain jika Anda membiarkannya.


20

Pada lingkungan OLTP 24/7 biasa, pengembang normal tidak boleh diizinkan dalam produksi. Titik! Jika, dari waktu ke waktu, alasan tertentu muncul, maka izin dapat diberikan atas permintaan. Tetapi secara biasa tidak.

Saya telah melihat banyak alasan untuk ini:

  • SELECT * dari tabel besar yang menuju ke:

    • masalah kinerja (produk kartesius);
    • memblokir masalah yang akhirnya membuat situs itu bertekuk lutut;
    • memblokir rantai yang membuat replikasi digantung;
    • memesan set besar data yang mengisi drive TempDB yang .. coba tebak? Disebabkan kegilaan total :-)!
    • tekanan darah tinggi untuk DBA yang bertanggung jawab atas produksi untuk malam itu;
  • membaca data sensitif (pengembang tidak boleh mengakses informasi kartu kredit .. atau informasi pribadi pengguna);

Saya yakin ada lebih banyak alasan.


19
  • Keamanan: Mungkin ada informasi sensitif yang disanitasi ketika mereka membuatnya tersedia untuk pengembang.
  • Paranoia: Beberapa orang mungkin berpikir Anda masih bisa mengacaukan data dengan hanya memilih akses.
  • Kinerja: Kueri membutuhkan beberapa sumber daya untuk melakukan, dan Anda tidak dapat memberi tahu saya pengembang Anda sempurna ketika mereka menulis kode.

16

Beberapa item untuk dipertimbangkan

  • Apakah data sensitif?
  • Apakah programmer bagian dari tim inti tepercaya atau tim lepas pantai?
  • Apa skala data yang ditanyakan dalam hal dampak kinerja?
  • Apa skala proyek atau dolar yang terlibat?
  • Seberapa kritis uptime-nya?

Dolar yang lebih kecil membutuhkan lebih sedikit proses yang membutuhkan aliran pengembangan yang lebih cepat.

Dolar yang lebih besar membutuhkan lebih banyak proses yang membutuhkan standar praktik pembangunan yang lebih ketat.

Sesuaikan praktik Anda dengan apa yang Anda lakukan.


14

Saya bekerja sebagai pengembang untuk perusahaan yang sangat besar. Semua pengembang kami yang akan melakukan segala jenis dukungan (pada dasarnya semuanya) memiliki akses ke basis data produksi yang relevan. Saya hanya bisa berbicara untuk tim khusus saya, tetapi saya akan memberi tahu Anda mengapa kami memiliki akses.

  1. Kita perlu akses waktu nyata untuk mengawasi pemrosesan harian kita. (Meskipun kami memiliki dasbor, kami harus dapat mengawasi hal-hal secara mendalam. Meskipun akan menyenangkan jika memiliki fitur ini di dasbor kami, kami mendapati bahwa itu tidak taktis.)
  2. Kami membutuhkan akses waktu nyata untuk menyelidiki setiap kegagalan produksi karena penundaan dapat memiliki dampak besar. (Saya tidak akan membahas kegagalan kami di sini. Mereka datang dalam segala macam)
  3. Kami sering perlu melakukan laporan khusus untuk pengguna bisnis dan informasi ini perlu terbaru. (dba tidak punya waktu untuk melakukan ini dan kami tidak punya waktu untuk menunggu mereka. non-ideal, pasti.)
  4. Kita perlu melakukan verifikasi penyebaran / tambalan DDL / DML produksi. (DBA menyebarkannya, tetapi hanya kita yang tahu bagaimana strukturnya. Kita tahu lebih banyak tentang struktur basis data kita daripada DBA. Kita mungkin aneh di sini, tetapi basis data sangat rumit karena bisnis kita sangat rumit.)

Kinerja adalah masalah. Kami memang memiliki kejadian pengembang yang menyebabkan pelambatan. Namun, ini adalah contoh yang terisolasi dan SQL kami sangat didorong oleh kinerja sehingga jarang pengembang kami tidak memahami dampak dari pertanyaan mereka.


2
Ini tidak membenarkan akses prod. nomor 4: gunakan alat seperti gerbang merah untuk menyiapkan skrip dengan benar. 3: gunakan data lama satu hari pada non-prod 1. apa yang tidak ada pelaporan atau dasbor?
gbn

@ gbn, 4) kita masih perlu memverifikasi lagi. 3) tidak mungkin hari tua.
user606723

11

Agar pertanyaan ini dapat ditanyakan, seseorang harus menganggap bahwa mereka saat ini tidak memiliki akses. Jika organisasi seseorang mengembangkan perangkat lunak dan ini untuk pemecahan masalah masalah pelanggan dan pelanggan memasok salinan database mereka, maka 'ya'. Kalau tidak, saya akan menganjurkan menjaga pengembang dari produksi dan memiliki lingkungan alternatif yang dibuat untuk kebutuhan penelitian mereka. Setelah pasta gigi keluar dari tabung, sulit memasukkannya kembali.


10

Saya setuju bahwa beban pembenaran harus ada pada orang-orang yang membutuhkan akses. Biasanya di lingkungan di mana saya berkonsultasi, saya memiliki akses ke sistem produksi di mana itu adalah lingkungan yang kecil dan saya adalah orang yang mendukung. Saya memiliki akses ke cadangan, dll. Di mana saya mendukung untuk dukungan, dan akses tidak langsung (melalui pengembang dukungan khusus) ke data produksi.

Yang penting adalah: Anda memerlukan akses ini ketika Anda berada di hook untuk menjaga semuanya berjalan lancar dan Anda harus menjawab pertanyaan orang keuangan tentang sesuatu yang tidak berfungsi. Anda tidak dapat selalu bekerja dari data lama bahkan dalam kasus itu. Di sisi lain, semakin banyak akses semakin buruk. Biasanya sebagai konsultan saya cenderung menghindari mendapatkan akses semacam ini kecuali jika diperlukan. Karena saya bekerja pada database keuangan, hal terakhir yang saya inginkan adalah dituduh memasukkan faktur saya sendiri :-D.

Di sisi lain, jika Anda tidak membutuhkan akses Anda tidak harus memilikinya. Saya tidak benar-benar membeli argumen data sensitif karena pengembang mungkin siap untuk memastikan ini ditangani dengan benar (dan sangat sulit untuk memverifikasi tanpa melihat apa yang sebenarnya disimpan ketika laporan bug masuk). Jika Anda tidak dapat mempercayai pengembang untuk melihat data yang disimpan oleh aplikasi pengembang, Anda tidak boleh menyewa pengembang untuk menulis aplikasi. Ada terlalu banyak cara pengembang bisa mengaburkan data dan mengirim email, dan Anda tidak pernah bisa yakin. Kontrol MAC membantu di sini tetapi masih cukup rumit untuk diterapkan.

Masalah besar dari pihak saya berkaitan dengan akses tulis. Jika pengembang tidak memiliki akses, maka fortiori, pengembang tidak memiliki akses tulis. Jika Anda ingin memverifikasi integritas buku, Anda ingin tetap akses tulis ke sesedikit mungkin orang. Jalur audit jauh lebih mudah untuk divalidasi jika pengembang tidak memiliki akses. Jika pengembang memiliki akses baca, maka Anda selalu memiliki beberapa pertanyaan, apakah telah ada beberapa privilege escallation attach yang dapat memberikan akses tulis (mungkin injeksi SQL prosedur yang tersimpan?). Saya sering memiliki akses penuh ke info penagihan klien ketika saya memiliki akses ke lingkungan pementasan. Jika ada lingkungan pementasan yang berfungsi, saya biasanya akan secara aktif meminta untuk tidak memiliki akses ke produksi kecuali jika diperlukan.

Jadi ini tidak sempurna, tentu saja. Pengembang masih dapat membangun pintu belakang ke dalam aplikasi yang mungkin tidak mudah terdeteksi, tetapi pendekatan ini adalah pendekatan yang masuk akal, mengingat fakta bahwa data cadangan tersedia dari sehari sebelum bagi saya tampaknya ini adalah masalah yang mereka miliki.

Semoga ini membantu.

Sunting: Hanya menambahkan bahwa pada lingkungan yang lebih besar tempat saya bekerja, saya telah memiliki akses ke data cadangan lengkap yang sering berkisar dari beberapa hari hingga beberapa bulan untuk sistem keuangan. Ini selalu cukup baik untuk pekerjaan saya dan satu-satunya saat itu telah rusak adalah ketika orang-orang keuangan membutuhkan kemampuan untuk menguji dengan data yang lebih baru sehingga mereka bisa cocok dengan produksi.


9

Tidak memiliki akses adalah hal yang baik dan cara untuk melindungi pengembang dan orang lain agar tidak secara tidak sengaja merusak data atau melihatnya. Ini juga melindungi perusahaan dari melanggar hukum (yaitu pelanggaran Hipaa dan masalah privasi)

Pengembang tidak pernah benar-benar membutuhkan akses ke lingkungan produksi, itu hanya lebih mudah dari sudut pandang pengembang jika bug yang sulit tidak dapat direproduksi.

Namun, pengembang dapat memasukkan mini-dumps atau file log dan menggunakan file simbol PDB untuk membuat kembali bug.

Jika data memang perlu dibawa ke lingkungan pengujian maka itu adalah khas untuk beberapa jenis proses untuk menggosok data yang dapat membuat pekerjaan tambahan.

Bergantung pada perangkat lunak basis data yang digunakan dalam apa yang Anda sebut produksi, lisensi baru mungkin diperlukan bagi pengembang untuk mengakses database, yang merupakan biaya besar untuk hanya memiliki akses baca.

Jika perusahaan Anda tidak memberi Anda alat untuk melakukan debug atau meneliti masalah produksi, itu bukan karena Anda tidak memiliki akses ke data produksi.

Data adalah bagian paling berharga dari sebagian besar aplikasi!


8

Kinerja mungkin menjadi salah satu alasannya.

Kueri pengembang seringkali tidak efisien, menyebabkan penguncian yang berlebihan atau penggunaan sumber daya sampai mereka disetel dengan benar.

Sistem produksi bukan tempat yang cocok bagi pengembang untuk bereksperimen.


8

Itu tergantung pada DBA dan bagaimana dia percaya diri dengan pengembang. Biasanya pengembang diberikan hak kueri (baca) ke basis data produksi. Sebagai aturan praktis, pengembang seharusnya hanya bekerja dengan database uji / dev.


8

Tantangannya adalah sebagian besar aplikasi perangkat lunak didorong oleh data. Jadi ketika Anda mencoba untuk memperbaiki masalah dalam aplikasi, Anda benar-benar perlu melihat data yang mengendarainya. Jadi pengembang benar-benar membutuhkan beberapa bentuk akses.

Menggunakan SQL login hanya memberi mereka akses hanya baca ke tabel sangat bagus. TETAPI, apa yang mencegah mereka membuat kueri dengan 20 bergabung atau melakukan SELECT * dari tabel dengan jutaan catatan? Kueri ini secara tidak sengaja dapat mematikan kinerja basis data dan penyimpanan Anda.

Perusahaan saya Stackify datang dengan cara cerdas untuk menyelesaikan ini. Pengembang dapat menjalankan kueri melalui perangkat lunak kami dan kami menggunakan rencana kueri untuk memastikan itu hanya pernyataan SELECT dan bahwa perkiraan biaya kueri rendah dan akan mengembalikan hanya beberapa catatan. Dengan cara ini mereka tidak bisa berbuat banyak kerusakan. Kami juga mengaudit semua kueri yang mereka jalankan.

Ini hanya salah satu hal yang kami sediakan. Lihat kami di http://www.Stackify.com untuk mempelajari lebih lanjut tentang solusi dukungan DevOps kami .


4
Beberapa orang mungkin menganggap ini sebagai spam karena niat tampaknya semata-mata untuk mempromosikan produk Anda. OTOH, ini relevan dengan pertanyaan dan diungkapkan dengan benar, jadi saya pribadi menganggap itu bermanfaat.
Jack Douglas

Sebagai poin penting, setidaknya dalam PostgreSQL, rencana kueri tidak cukup untuk mengetahui bahwa itu adalah permintaan read-only.
Chris Travers

7

Iya. Dalam beberapa kasus, masuk akal untuk mengizinkan beberapa subset pengguna, termasuk pengembang beberapa tingkat akses ke permintaan data produksi. Namun, batasan yang tepat harus ada karena dua alasan. Pertama, sebagai DBA, Anda harus melakukan yang terbaik untuk memastikan tingkat layanan yang dibutuhkan oleh semua pengguna. Selain itu, Anda ingin mencegah pertanyaan buruk yang tidak disengaja seperti penghapusan massal atau vilolasi aturan bisnis. Itu harus pergi tanpa mengatakan bahwa kontrol keamanan yang tepat harus ada.

Apa pun alasan yang mungkin Anda miliki karena tidak mengizinkan kueri ad hoc langsung ke tabel basis data, mungkin ada kasus yang dibuat untuk memungkinkan kueri melihat dan menyimpan prosedur. Dengan menggunakan izin basis data, Anda dapat mencegah permintaan SELECT terhadap tabel secara langsung dan bahkan membatasi tampilan dan prosedur tersimpan yang diberikan pengguna. Metode ini tidak hanya memberikan fleksibilitas kepada basis pengguna Anda, tetapi juga melindungi integritas dan keandalan data Anda ketika diimplementasikan dengan benar.


5

Di perusahaan kami, kami memelihara budak hanya-baca dari basis data produksi yang tidak diandalkan oleh layanan produksi. Kami memberikan pengembang akses kepada mereka untuk mengakses data produksi. Jika ada data sensitif (Info Pelanggan, info pembayaran, dll.) Kami membatasi replikasi tabel-tabel itu dan memelihara tabel data sampel pada server slave.


1

Tidak. Tidak pernah !!

Inilah sebabnya kami memiliki server pengembangan / Uji / UAT. Data dari Produksi dapat disalin ke lingkungan pengujian dan pengembang dapat melanjutkan pengujian mereka. Kueri pemilihan bisa sangat berbahaya juga jika terjadi lingkungan Produksi. Ini meningkatkan beban dan pada waktu puncak dapat menurunkan seluruh kinerja.

Setiap informasi yang mereka butuhkan harus melalui DBA yang dapat menjalankan apa yang mereka inginkan (Pilih) dan mengirimkan hasilnya kepada mereka. Itulah yang kami lakukan di lingkungan kami.


-1

Saya tidak yakin mengapa semua orang menganggap pengembang itu bodoh dan tidak tahu apa-apa. Saya mendapatkan sampel satu ton peran berbeda di mana mereka kacau dan tidak boleh "dalam produksi". Saya sudah DBA, Admin Sistem, Admin Jaringan, Pengembang, dll ... semuanya berantakan.

Tidak seorang pun (dev, dba, sa) memiliki akses ke server atau database di lingkungan apa pun dengan adanya login jaringan normal. Mereka semua memiliki akun "admin" khusus yang harus digunakan. Ya, biasanya dba dan sa menggunakan mereka lebih sering, tetapi bahkan mereka harus melangkah dengan ringan. Saya sudah terbakar oleh semua orang.

Jadi, pada hari yang baik, tidak ada peran TI yang membutuhkan akses. Namun, sh! T mengenai kipas angin, semua tangan di atas geladak dan kita membutuhkan orang yang tepat untuk menyelesaikan masalah. Ini biasanya dipimpin oleh pengembang yang mengetahui aplikasi dan memandu dba dan sa ke poin-poin tertentu. Itu hanya penundaan yang tidak dibutuhkan atau permintaan dan persetujuan.

Selain itu, persetujuan tidak pernah diikuti oleh audit jenis apa pun, jadi persetujuan tidak ada artinya.


2
Tidak yakin lingkungan apa yang Anda bicarakan, tetapi di perusahaan mana pun yang harus mematuhi peraturan serius seperti PCI tingkat tinggi, SOX, SISR, dll. Log level SA masuk dan akses KEBUTUHAN yang akan dicatat. Dalam kasus kami, kami tidak hanya mencatatnya, tetapi kami juga memisahkannya sehingga tidak ada yang dapat mengeditnya setelah faktanya.
Ali Razeghi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.