bunuh semua kueri - mysql
<p>kadang-kadang selama snafu saya harus menjalankan <code>kill query xxxxxxx</code> dua puluh atau tiga puluh kali. semacam <code>kill all</code> perintah saya hilang?</p><p>karena saya tidak suka mengetik.</p>
<p>dari baris perintah linux</p><pre><code>for proc\_to\_kill in `mysql -h... -u... -p... -a --skip-column-names -e"show processlist" | grep -v "system user" | awk '{print $1}'` ; do mysql -h... -u... -p... -a --skip-column-names -e"kill query ${proc\_to\_kill}" ; done </code></pre><p>anda bisa mengubah opsi grep di header loop for untuk menemukan pengguna tertentu atau string tertentu dalam kueri.</p><p>jika anda memiliki mysql 5.1 di mana daftar proses ada di information\_schema, anda bisa melakukan ini untuk menghasilkan perintah kill query dalam jumlah besar dari dalam klien mysql:</p><pre><code>select group\_concat(concat('kill query ',id,';') separator ' ') killquery from information\_schema.processlist where user&lt;&gt;'system user'\g </code></pre><p>anda bisa melakukan klausa where terhadap bidang info untuk mencari kueri tertentu, bidang time terhadap kueri yang sudah berjalan lama, atau bidang db terhadap database tertentu.</p>
<p>anda bisa mengatur variabel <a href="http://en.wikipedia.org/wiki/internal\_field\_separator">bidang pemisah internal</a> (ifs) variabel, dan kemudian membiarkannya mengurai menjadi array. ketika ini terjadi dalam suatu perintah, maka penugasan ke <code>ifs</code> hanya terjadi pada lingkungan perintah tunggal itu (ke <code>read</code>). ini kemudian mem-parsing input sesuai dengan nilai variabel <code>ifs</code> ke dalam array, yang kemudian dapat kita iterate.</p><pre><code>ifs=';' read -ra addr &lt;&lt;&lt; "$in" for i in "${addr[@]}"; do # process "$i" done </code></pre><p>ini akan mengurai satu baris item yang dipisahkan oleh <code>;</code>, mendorongnya ke dalam array. hal-hal untuk memproses seluruh <code>$in</code>, setiap kali satu baris input dipisahkan oleh <code>;</code>:</p><pre><code> while ifs=';' read -ra addr; do for i in "${addr[@]}"; do # process "$i" done done &lt;&lt;&lt; "$in" </code></pre> <p>perintah <kbd>d</kbd><kbd>w</kbd> akan menghapus dari posisi kursor saat ini ke awal karakter word berikutnya. perintah <kbd>d</kbd><kbd>$</kbd> (perhatikan, itu tanda dolar, bukan tanda 's') akan dihapus dari posisi kursor saat ini ke akhir baris saat ini. <kbd>d</kbd> adalah sinonim untuk <kbd>d</kbd><kbd>$</kbd>.</p> <p>shmuel613, akan lebih baik untuk memperbarui pertanyaan awal anda daripada menjawab. lebih baik jika ada satu tempat yang berisi pertanyaan lengkap daripada menyebar dalam diskusi.</p><p>jawaban ben masuk akal, kecuali ia tampaknya memiliki 'tidak' di mana ia tidak menginginkannya. menjatuhkan tabel hanya jika<strong> tidak </strong>ada tidak tepat.</p><p>anda memang membutuhkan banyak pernyataan. buat dengan kondisional lalu isi:</p><ol> <li>buat tabel sementara jika tidak ada fubar (id int, name varchar (80))</li> <li>truncate table fubar</li> <li>masukkan ke dalam fubar pilih * dari barfu</li> </ol><p>atau cukup jatuhkan dan buat ulang</p><ol> <li>drop tabel jika ada fubar</li> <li>buat tabel sementara id select fubar, nama dari barfu</li> </ol><p>dengan sql murni itu adalah dua kelas solusi nyata anda. saya suka yang kedua lebih baik.</p><p>(dengan prosedur tersimpan anda bisa menguranginya menjadi satu pernyataan. sesuatu seperti: truncateandpopulate (fubar) tetapi pada saat anda menulis kode untuk truncateandpopulate () anda akan menghabiskan lebih banyak waktu daripada hanya menggunakan sql di atas.)</p> <p>anda menulis (beri penekanan pada saya):</p><blockquote> <p>semakin tinggi jumlah kata sandi khusus aplikasi <strong>semakin tinggi kemungkinan serangan brute force berhasil.</strong></p> <p>kata sandi ini memiliki panjang yang tetap dan tidak mengandung angka atau simbol, <strong>yang membuatnya lebih rentan terhadap serangan brute force daripada kata sandi dengan panjang yang tidak diketahui yang mengandung huruf, angka, dan simbol</strong>.</p> </blockquote><p>jawaban singkat: tidak dengan cara praktis.</p><p>jawaban panjang:</p><p>lakukan perhitungan matematis: 16 huruf kecil memungkinkan 26 ^ 16 kata sandi yang berbeda, yaitu lebih dari 10 ^ 22 = 10 × 1000 ^ 7 = kemungkinan sepuluh kata sandi sextillion.</p><p>jika kata sandi dipilih secara acak <em> dengan probabilitas yang sama </em> (kami tidak memiliki alasan untuk percaya bahwa ini bukan masalahnya), <strong>kemungkinan memecahkan kata sandi oleh brute force dapat diabaikan</strong>, <em> bahkan jika google tidak melihat serangan itu dan tidak melakukan tindakan balasan apa pun. </em></p><p>bahkan dengan 100 kata sandi khusus aplikasi untuk satu akun google, tidak ada cara bagi siapa pun untuk mencoba serangan ini. "kerentanan" terhadap serangan brute force adalah nol.</p><p>dan <em> jauh lebih mudah </em> pada banyak ponsel pintar untuk mengetikkan kata sandi yang hanya terbuat dari huruf kecil daripada kombinasi huruf dan digit atau huruf besar-kecil ( untuk jumlah kemungkinan kata sandi yang sama).</p><p>anda juga menulis:</p><blockquote> <p>google tidak secara otomatis menonaktifkan kata sandi khusus aplikasi ketika tiba-tiba digunakan di luar konteks yang diharapkan (mis. untuk mengakses email meskipun telah diatur untuk chrome sinkronisasi).</p> </blockquote><p>itulah satu-satunya masalah keamanan nyata di sini.</p> <p>dua arah. simbol (notasi <code>:foo</code>) atau konstanta (notasi <code>foo</code>).</p><p>simbol sesuai ketika anda ingin meningkatkan keterbacaan tanpa mengotori kode dengan string literal.</p><pre><code>postal\_code[:minnesota] = "mn" postal\_code[:new\_york] = "ny" </code></pre><p>konstanta sesuai ketika anda memiliki nilai dasar yang penting. hanya mendeklarasikan modul untuk memegang konstanta anda dan kemudian mendeklarasikan konstanta di dalamnya.</p><pre><code>module foo bar = 1 baz = 2 biz = 4 end flags = foo::bar | foo::baz # flags = 3 </code></pre> <p>iterasi atas string sayangnya agak lambat di python. ekspresi reguler melebihi urutan besarnya lebih cepat untuk hal semacam ini. anda hanya perlu membangun kelas karakter sendiri. modul <em>unicodedata</em> cukup membantu untuk ini, terutama fungsi <em>unicodedata.category ()</em>. lihat <a href="http://www.unicode.org/reports/tr44/#general\_category\_values">basis data karakter unicode</a> untuk deskripsi kategori.</p><pre><code>import unicodedata, re all\_chars = (unichr(i) for i in xrange(0x110000)) control\_chars = ''.join(c for c in all\_chars if unicodedata.category(c) == 'cc') # or equivalently and much more efficiently control\_chars = ''.join(map(unichr, range(0,32) + range(127,160))) control\_char\_re = re.compile('[%s]' % re.escape(control\_chars)) def remove\_control\_chars(s): return control\_char\_re.sub('', s) </code></pre> <p>karakter unicode 4 byte belum banyak digunakan, jadi tidak semua aplikasi di luar sana mendukung sepenuhnya. mysql 5.5 berfungsi dengan baik dengan karakter 4 byte ketika dikonfigurasi dengan benar - periksa apakah komponen anda yang lain dapat bekerja dengannya juga.</p><p>berikut beberapa hal lain yang perlu diperiksa:</p><ul> <li> <p>pastikan semua rangkaian karakter default tabel dan bidang teks anda dikonversi ke utf8mb4, di samping menetapkan set karakter klien &amp; server, mis. <code>alter table mytable charset=utf8mb4, modify column textfield1 varchar(255) character set utf8mb4,modify column textfield2 varchar(255) character set utf8mb4;</code> dan seterusnya.</p> <p>jika data anda sudah dalam karakter utf8, itu harus dikonversi ke utf8mb4 di tempat tanpa masalah. seperti biasa, buat cadangan data anda sebelum mencoba!</p> </li> <li> <p>pastikan juga lapisan aplikasi anda menyetel karakter koneksi basis data ke utf8mb4. periksa ini benar-benar terjadi - jika anda menjalankan versi yang lebih lama dari pustaka klien mysql framework yang anda pilih, itu mungkin belum dikompilasi dengan dukungan utf8mb4 dan itu tidak akan mengatur charset dengan benar. jika tidak, anda mungkin harus memperbarui atau mengompilasinya sendiri.</p> </li> <li> <p>saat melihat data anda melalui klien mysql, pastikan anda menggunakan mesin yang dapat menampilkan emoji, dan jalankan <code>set names utf8mb4</code> sebelum menjalankan kueri.</p> </li> </ul><p>setelah setiap tingkat aplikasi anda dapat mendukung karakter baru, anda harus dapat menggunakannya tanpa korupsi.</p> secara fisik : pasti lebih sakit ditusuk 1000x oleh pedang tajam .. tapi rasa sakitnya itu cuma bentar, kita pasti langsung mati dan gak ngerasain sakit lagi..

secara psikhis: lebih sakit kehilangan sesorang yg aku cintai.. meskipun fisik gak sakit.. tapi hati sakiiitttt banget.. dan rasanya itu awet.. kerasa ampe lama banget.. kadang kefikiran terus.. uhh.. <p>letakkan skrip shell di salah satu folder ini: <code>/etc/cron.daily</code>, <code>/etc/cron.hourly</code>, <code>/etc/cron.monthly</code> atau <code>/etc/cron.weekly</code>.</p><p>jika ini tidak cukup untuk anda, anda dapat menambahkan tugas yang lebih spesifik mis. dua kali sebulan atau setiap 5 menit. pergi ke terminal dan ketik:</p><pre><code>crontab -e </code></pre><p>ini akan membuka crontab pribadi anda (file konfigurasi cron). baris pertama dalam file itu menjelaskan semuanya! di setiap baris anda dapat menentukan satu perintah untuk dijalankan dan jadwalnya, dan formatnya cukup sederhana ketika anda terbiasa. strukturnya adalah:</p><pre><code>minute hour day-of-month month day-of-week command </code></pre><p>untuk semua angka yang dapat anda gunakan daftar, mis. <code>5,34,55</code> dalam bidang menit berarti berjalan pada 5 lewat, 34 lewat, dan 55 lewat berapa pun jam yang ditentukan.</p><p>anda juga dapat menggunakan interval. mereka didefinisikan seperti ini: <code>*/20</code>. contoh ini berarti setiap tanggal 20, jadi pada kolom menit itu sama dengan <code>0,20,40</code>.</p><p>jadi, jalankan perintah setiap hari senin jam 5.30 sore:</p><pre><code>30 17 * * 1 /path/to/command </code></pre><p>atau setiap 15 menit</p><pre><code>*/15 * * * * /path/to/command </code></pre><p>perhatikan bahwa hari-hari dari 0-6 di mana 0 adalah hari minggu.</p><p>anda dapat membaca lebih lanjut <a href="https://help.ubuntu.com/community/cronhowto">di sini</a> .</p> <p>secara pribadi, saya akan menghindari beberapa protokol enkripsi sebagian besar waktu. ini menambah kompleksitas implementasi tambahan yang signifikan tanpa membuat data anda lebih aman di dunia nyata, kecuali jika protokol enkripsi yang anda gunakan pada akhirnya rusak atau menjadi layak secara komputasi di kemudian hari untuk dilanggar.</p><p>memang, saya akan tidak setuju dengan orang lain yang mengklaim bahwa dengan melakukan itu anda memiliki permukaan serangan yang lebih besar dan meningkatkan kerentanan anda. sementara permukaan serangan secara teknis meningkat (anda dapat menyerang blowfish; anda dapat menyerang aes), karena anda harus berhasil menyerang kedua keamanan anda tidak menurun. (anggap pesan anda dienkripsi berlipat ganda dengan cara bersarang (apa pun yang tidak masuk akal) dengan kunci/frasa sandi independen seperti <code>multiply\_encrypted\_file = blowfish(aes(file))</code>. jika penyerang mendapatkan <code>multiply\_encrypted\_file</code> itu adalah sama sekali tidak lebih lemah daripada mendapatkan <code>encrypted\_file = aes(file)</code> meskipun anda harus berhati-hati <a href="https://security.stackexchange.com/questions/18087/is-multiple-encryption-a-good-idea#comment29578\_18089">mengekspos diri anda terhadap serangan plaintext yang diketahui</a> yang dapat melemahkan keamanan jika anda menggunakan kunci/frasa sandi yang sama di semua tingkatan dan memiliki header/struktur file yang dapat ditebak setelah dekripsi tingkat pertama). bahkan jika mereka menemukan kelemahan yang dapat dieksploitasi dalam enkripsi <code>blowfish</code>, mereka masih hanya dapat membalikkannya dan kemudian menemukan file terenkripsi aes.</p><p>namun, saya menggunakan beberapa lapis enkripsi hampir setiap hari ketika ada alasan yang sah untuk itu dan memberikan keamanan ekstra. sebagai contoh, saya sering harus terhubung ke komputer kantor dari rumah saya, tetapi untuk keamanan komputer kantor berada di intranet pribadi, yang dipadamkan dari dunia luar.</p><p>untuk menghubungkan, saya pertama-tama membuat terowongan vpn melalui internet publik ke server vpn yang menghadap publik yang memverifikasi identitas saya yang bertindak sebagai gateway ke intranet. kemudian semua lalu lintas jaringan saya mengirim melalui internet antara rumah saya dan pekerjaan yang dienkripsi menggunakan protokol ipsec oleh vpn ke server vpn yang mendekripsi dan meneruskannya ke mesin lokal seolah-olah itu di intranet lokal. namun, saya kemudian mungkin ingin terhubung ke sesuatu di tempat kerja menggunakan <code>ssh</code> atau <code>https</code>. ini memberikan lapisan enkripsi untuk intranet lokal di tempat kerja, sehingga rekan kerja saya tidak bisa mengatakan menguping koneksi jaringan saya. namun, bagi seseorang di isp saya yang mengambil paket data yang mereka lihat telah dienkripsi berlipat ganda: <code>vpn\_encryption(ssh\_encryption(actual\_data\_to\_be\_transferred))</code>. sekali lagi, saya tidak menggunakan protokol ssh (di atas vpn) untuk membuat data saya lebih aman terhadap isp saya yang menguping; tetapi sama sekali tidak membuatnya lebih mudah bagi isp saya untuk menguping).</p><hr><p>edit: beberapa tetap berpendapat bahwa implementasi akan jauh lebih sulit daripada enkripsi standar, tetapi tidak harus. untuk menunjukkan, saya pertama-tama mengimplementasikan blowfish/aes di python menggunakan <a href="https://www.dlitz.net/software/pycrypto/">pycrypto</a> :</p><pre><code>from crypto.cipher import blowfish, aes from crypto import random from hashlib import sha256, sha512 def encrypt(plaintext, key, crypto\_class): block\_size = crypto\_class.block\_size iv = random.new().read(block\_size) cipher = crypto\_class.new(key, crypto\_class.mode\_cbc, iv) pad\_len = block\_size - (len(plaintext) % block\_size) padding = ''.join([chr(pad\_len)]*pad\_len) encrypted\_msg = iv + cipher.encrypt(plaintext + padding) return encrypted\_msg def decrypt(encrypted\_msg, key, crypto\_class): block\_size = crypto\_class.block\_size iv = encrypted\_msg[:block\_size] cipher = crypto\_class.new(key, crypto\_class.mode\_cbc, iv) padded\_msg = cipher.decrypt(encrypted\_msg[block\_size:]) pad\_len = ord(padded\_msg[-1]) msg = padded\_msg[:len(padded\_msg)-pad\_len] return msg </code></pre><p>yang digunakan dalam python seperti:</p><pre><code>&gt;&gt;&gt; plaintext = """confidential info: wall street does insider trading. also, israel has nuclear weapons.""" &gt;&gt;&gt; passphrase = 'dinner artist mere trace metal thirty warp better' &gt;&gt;&gt; key1 = sha256(passphrase).digest()[0:16] # use 16-bytes=128bits for aes128 &gt;&gt;&gt; key2 = sha512(passphrase).digest()[0:56] # 56 bytes max for blowfish. # ideally independent keys but based on same passphrase for simplicity &gt;&gt;&gt; aes\_encrypted\_msg = encrypt(plaintext, key1, aes) # '\r\xd0\x8e\x11\xbd\x9cn3\xd3\xa7a\xce\xd7\x15\xb4\xb2\xd7@\nbv\x95\xe0\xdb\xd0\xd2\xf2k\x9b\xcd\x80\xc0xr\xb7\x8d/\x16=\xfadv\xf0\xe2\xc8"x,\xa6\xf8\xed\x8b\xee#\xe1\xd1\xd4u4*0\x07\x11\x08\xc5\xe3\x98\r5\x018\xa5\xf1\x84\xb4\x90\xbc\x12\x80e\xbd\xe9\tn\xe1m\x92\xbb=\x06\r\xfe(\xe8\x12\xc7\x86=\n\x0f\x00\xa1r\xe6\x9c\xca\xaa\x15\xc1(\xaa\xe6' &gt;&gt;&gt; print decrypt(aes\_encrypted\_msg, key1, aes) confidential info: wall street does insider trading. also, israel has nuclear weapons. &gt;&gt;&gt; blowfish\_encrypted\_msg = encrypt(plaintext, key2, blowfish) # "a\xd2\xe5mf\xac\x81f\xe9q\xbd.\xd9swa\x8a)\xcc\x84s\x08\x00\x84\xc6y\xf5\xa1\x16\x88jauof\t4\xa2\xf2b\x89s\xaa\xa6\xb3\xda\xe2\xdd\xff\x0f\xc2\xe2\x1dw\xf6\x840\xe9\x08eje\xfa\x14\xb77\x99\x00a\xe0\xcd\xaf\xbe\x83\x08\xc0'\x81\x8b\x85\xf0\xdaxt\x94!o\xd0\x07\x0f#\xae$,\x91q" &gt;&gt;&gt; print decrypt(blowfish\_encrypted\_msg, key2, blowfish) confidential info: wall street does insider trading. also, israel has nuclear weapons. </code></pre><p>sekarang, anda dengan detail minimal anda dapat mengimplementasikan sesuatu seperti:</p><pre><code>def double\_encrypt\_using\_keys(plaintext, key1, key2): tmp\_encrypted\_msg = encrypt(plaintext, key1, aes) encrypted\_msg = encrypt(tmp\_encrypted\_msg, key2, blowfish) return encrypted\_msg def double\_decrypt\_using\_keys(encrypted\_msg, key1, key2): tmp\_encrypted\_msg = decrypt(encrypted\_msg, key2, blowfish) plaintext = decrypt(tmp\_encrypted\_msg, key1, aes) return plaintext def passphrase\_to\_keys(passphrase): return sha256(passphrase).digest()[0:16], sha512(passphrase).digest()[0:56] def double\_encrypt(plaintext, passphrase): return double\_encrypt\_using\_keys(plaintext, *passphrase\_to\_keys(passphrase)) def double\_decrypt(encrypted\_msg, passphrase): return double\_decrypt\_using\_keys(encrypted\_msg, *passphrase\_to\_keys(passphrase)) </code></pre><p>yang bisa digunakan seperti:</p><pre><code>&gt;&gt;&gt; double\_encrypted\_msg = double\_encrypt(plaintext, passphrase) # '\xe9\xcd\x89\xed\xb1f\xd4\xbel\xcb\x8b2!\x98\xf0\xe7\xcd.\xefe\x1b\x92&gt;\x82(\x8dg\xdaus\x8f!\xe2rgkj\xfb\xed\xb0\x10~n\xae\xe1\xce\x10\xf0\xa4k\x9f\xe6\xff\x8b\x7f\xdex]\x9a&lt;\x9d\xc7\xa9\xb8\x9a\xbbx\xa4\xcekoa\xbc=)\xcc\xe6r\xd7\xb7\xd0[\xc3\xfc\xbfou\x86\x18\xec5\xa9n\xed\xaa=\x9f\x06.\xbd\x0cmy\xcch\r\xf8\x8cr\xc0\xc5\xdeo\xef\xb0\xe01\x162\xaf\xf2\x1f\xd5\xb5"\x8a\xea\x96' &gt;&gt;&gt; print double\_decrypt(double\_encrypted\_msg, passphrase) confidential info: wall street does insider trading. also, israel has nuclear weapons. </code></pre><p>saya tidak melihat bagaimana implementasi multiply-terenkripsi memiliki lebih banyak permukaan serangan dan lebih lemah daripada implementasi tunggal. implementasi ke dunia luar masih dapat memasukkan kata sandi untuk mendekripsi file yang disimpan.</p>