sql: cara menguji kekuatan kata sandi [ditutup]

bagaimana cara menguji kekuatan kata sandi menggunakan SQL?

Saya memiliki tabel lama dengan kata sandi, dan saya perlu memeriksa kekuatan kata sandi uji di SSMS sekali dan memperbaikinya.

persyaratan untuk sistem saat ini adalah:

  1. minimal 2 karakter huruf kecil ( abcdefg ... )
  2. minimal 2 karakter huruf besar ( ABCDEFG ... )
  3. minimal 2 angka ( 123456 ... )
  4. setidaknya 2 karakter liar ( ~!@#$%^& ... )
  5. panjang minimum harus 8 karakter

Terima kasih


person armen    schedule 12.02.2014    source sumber
comment
Validasi di ujung depan   -  person Linga    schedule 12.02.2014
comment
tidak ada ujung depan untuk kasus ini   -  person armen    schedule 12.02.2014
comment
Dan bagaimana cara kerjanya secara teori?   -  person Alexander    schedule 12.02.2014
comment
Jika tidak ada front end lalu bagaimana jika kriteria yang Anda tentukan di atas tidak terpenuhi? maksudku Apa yang ingin Anda capai ??   -  person Krishnraj Rana    schedule 12.02.2014
comment
ada tabel lama dengan kata sandi, dan saya perlu memeriksa kekuatan kata sandi uji di SSMS sekali dan memperbaikinya   -  person armen    schedule 12.02.2014
comment
Mengapa pertanyaan ini ditunda? Pertanyaannya sangat sederhana, dan tidak memerlukan informasi lebih lanjut. Ini dapat ditulis ulang sebagai: Bagaimana Anda menggunakan SQL untuk memeriksa kolom varchar untuk persyaratan berikut ...?. Lihat jawaban saya di bawah ini.   -  person Dan    schedule 12.02.2014
comment
@ling.s, OGHaza, DontVoteMeDown, Mario dan Saurabh - apa sebenarnya yang salah dengan pertanyaan saya? apa sebenarnya yang tidak kamu pahami dari pertanyaan yang diberikan? bantu saya memahami kesalahan apa yang saya lakukan! seperti yang Anda lihat, pertanyaan saya sudah terjawab. apakah ini semacam demonstrasi kekuasaan? tolong jangan lupa tentang apa itu stackoverflow!   -  person armen    schedule 13.02.2014


Jawaban (1)


Seperti yang telah disebutkan orang lain, pemeriksaan semacam ini JAUH lebih cocok untuk aplikasi yang bertanggung jawab menulis data ke dalam database. Salah satu alasannya adalah SQL sangat buruk untuk operasi string tingkat lanjut.

Namun jika Anda benar-benar harus melakukannya menggunakan SQL, hal seperti ini akan mengarahkan Anda ke arah yang benar:

SELECT Password,
    CASE WHEN 
        Password COLLATE Latin1_General_BIN LIKE '%[a-z]%[a-z]%' AND
        Password COLLATE Latin1_General_BIN LIKE '%[A-Z]%[A-Z]%' AND
        Password LIKE '%[0-9]%[0-9]%' AND
        Password LIKE '%[~!@#$%^&]%[~!@#$%^&]%' AND
        LEN(Password) >= 8
    THEN 1 ELSE 0 END AS Valid
FROM TableWithPasswords

Kolom "Valid" akan berisi angka 1 jika kata sandi memenuhi kriteria pernyataan CASE, 0 jika tidak. Jika Anda ingin menambahkan lebih banyak karakter khusus ke persyaratan ke-4, ingatlah untuk menghindarinya dengan benar, sesuai dengan ini: http://technet.microsoft.com/en-us/library/ms179859.aspx

Perhatikan pernyataan COLLATE - ini untuk memastikan perbandingan peka huruf besar-kecil untuk operator LIKE.

person Dan    schedule 12.02.2014
comment
sangat dekat, tetapi '11aAAA##' harus menghasilkan 0, bukan 1 (satu karakter huruf kecil, bukan 2+). juga COLLATE Latin1_General_CS_AS pada akhirnya memberi saya kesalahan (Sintaks salah di dekat kata kunci 'COLLATE') - person armen; 12.02.2014
comment
Saya telah mengedit posting saya. Bisakah Anda mencoba lagi? Kali ini, pernyataan COLLATE harus memastikan bahwa setiap perbandingan peka terhadap huruf besar-kecil, dan oleh karena itu '11aAAA##' harus menghasilkan 0, karena perbandingan pertama akan salah. - person Dan; 12.02.2014
comment
saya mencoba dan masih tidak berfungsi dengan benar. '11aAAA##' masih menghasilkan 1. Anda dapat memeriksanya di sini : sqlfiddle.com/#!6 /b11c0/1 - person armen; 12.02.2014
comment
Menurut postingan ini Anda mungkin perlu ubah susunannya menjadi Latin1_General_BIN. Saya telah mengedit posting saya. sqlfiddle.com/#!6/b11c0/2 - person Dan; 12.02.2014