منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[سؤال] SQL 2019 - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : [سؤال] SQL 2019 (/showthread.php?tid=40561)



SQL 2019 - محمد بوقزاحة - 24-01-22

ممكن  كود لتغير  الارقام  السرية للمستخدمين في DATABASE  SQL 2019
بشكل نجوم  ****    
والعكس


مثل الصورة المرفقة


RE: SQL 2019 - ابو انس - 25-01-22

راجع هذا الرابط
https://www.mssqltips.com/sqlservertip/4037/storing-passwords-in-a-secure-way-in-a-sql-server-database/



او بامكانك قبل حفظ الرقم السري في قاعدة البيانات ان تجري عليه بعض التعديلات بأن تضيف اوله رقم يتكون مثلا من خانتين وفي اخره رقم ثم تجمع الرقم الناتج مع رقم معين وتضربه برقم معين 
ثم تقوم بحفظ الناتج الكلي في قاعدة البيانات  فعلى افتراض ان الرقم السري 12345 نضيف اوله مثلا 24 واخره 25 فيصبح الرقم 2412344525 ثم نجع الناتج مع الرقم 2000 مثلا فيصبح الرقم كالتالي 241236525 ثم نضرب مثلا ب 17 فيصبح الرقم السري الذي يجزن في قاعدة البيانات هو 4101020925
وعند استدعائه يجب ارجاعه الى الرقم الاصلي بعملية عكسية


RE: SQL 2019 - عدنان الشمري - 25-01-22

يمكن تشفير الرمز قبل الحفظ ومن ثم فك التشفير عند الاستدعاء


RE: SQL 2019 - محمد بوقزاحة - 25-01-22

(25-01-22, 08:30 PM)عدنان الشمري كتب : يمكن تشفير الرمز قبل الحفظ ومن ثم فك التشفير عند الاستدعاء

ممكن اكواد التشفير 
وفك التشفير


RE: SQL 2019 - ابراهيم ايبو - 25-01-22

السلام عليكم ورحمة الله وبركاته
اخي الكريم محمد
بالنسبة لحفظ كلمات السر في قاعدة البيانات على شكل نجمة لا أظن يمكن ذلك او لنقل ليس عندي علم لطريقة ما !!
 لأن التخزين هو عبارة عن نص وإن قمت بالتخزين على شكل نجمة او نقط فأن النص المخزن لا يعني شيئا سوى نجوم او نقط
ولا يمكن تحويلهم كما نفعل مع مريع النص
لدي فكرة وسأورد لك مثال عليها 
بما انك يمكنك قفل قاعدة البيانات بكلمة سر حيث لا يمكن لاحد الدخول اليها فلا ضير ان كتبت كلمات السر في الجدول على حالها  
لكن يمكننا تحويل كلمات السر هذه عند جلبها الى الداتاغرايد بأن نجعلها بشكل نجوم  ولا يمكن رؤيتها وبخاصة ان منعنا التحرير في الداتاغرايد 
أي Enable Editing=false
في المثال التالي  نفذت لك الكلام أعلاه وزدت عليه عند اختيار أي سجل سيتم عرضه في مربعي النص
 واجد للاسم والثاني للباسورد يمكنك عرض كلمة السر او اخفاؤها عبر الشك بوكس 
ربما تروق لك الفكرة هذه


RE: SQL 2019 - عبدالله الدوسري - 26-01-22

بما انك تستخدم SQL DATABASE 2019

استخدم الطريقة :
HashAlgorithm.ComputeHash


أولاً تقوم بتحويل النص العادي (والتي هي كلمة المرور) : تحويلها من نص ( String ) إلى مصفوفة بايتات ( ()Byte )
كود :
Dim PasswordData As Byte() = System.Text.Encoding.UTF8.GetBytes(Me.PasswordTextBox.Text)



ثانياُ : تنشاء متغير باسم ( SHA512 ) من نوع ( System.Security.Cryptography.SHA512Managed )  
وذلك لإستخدام خوارزمية HashAlgorithm ( لتشفير البيانات في إتجاه واحد فقط غير قابل لفك التشفير )
كود :
Dim SHA512 As New System.Security.Cryptography.SHA512Managed


ثالثاً : نستخدم المتغير SHA512 لتشفير البيانات الموجودة في المصفوفة ( PasswordData ) وحفظها في متغير جديد باسم ( PasswordHash )
كود :
Dim PasswordHash As Byte() = SHA512.ComputeHash(PasswordData)



إذا كان صندوق النص ( Me.PasswordTextBox.Text ) يحمل القيمة ( vb4arb.com )
أي ان كلمة المرور = vb4arb.com
بعد عملية التشفير بواسطة الطريقة ComputeHash
النتيجة ستكون كالتالي : وذلك بعد التشفير
لاحظ ان النص الموجود بالأسفل يعبر عن شكل البيانات الموجودة في المصفوفة المشفرة
ولكن المصفوفة المشفرة أساساً ليسة بهذا الشكل ( قمت بتحويلها إلى نص وذلك حتى تتمكن من أخذ فكرة عن شكل الناتج )
كود :
45b6deacb27a617b889f1396da586270a131082c5ad83a9cd916aa72b07c296a43f33290aa9548f9d1b7fbbf169092ca8a25251ea461e688985451d5f8d77d39


******************************************************************************
الطريقة المستخدمة لعرض شكل المصفوفة بشكل نصي :  ( هذا النص البرمجي فقط لشرح شكل المصفوفة وغير مطلوب ,, تم إستخدامة فقط لعرض القيمة الموجودة بالأعلى)
كود :
Dim txt As String = BitConverter.ToString(PasswordHash).Replace("-", "")

******************************************************************************





الآن قم بحفظ قيمة المتغير ( PasswordHash ) والذي يحمل مصفوفة البيانات بعد التشفير
قم بحفظ القيمة في حقل قاعدة البيانات الخاص بكلمة المرور
ويكون نوع الحقل في قاعدة البيانات من نوع ( varbinary ) حصراً

الآن انت تمتلك كلمة مرور محفوظة في قاعدة البيانات ومشفرة ولا يمكن أبداً فك تشفيرها ( لأنها مشفرة بطريقة تشفير بإتجاه واحد ) 
إتجاه واحد يعني تشفير فقط ولا يمكن فك التشفير
بإتجاهين يعني تشفير ويمكن فك التشفير بالعكس


ماذا يمكنك الآن ان تفعل بهذا الحقل ؟؟؟؟
فقط يمكنك إستخدامة للمقارنة فقط

أي بمعنى :

إذا أردت ان تتحقق من صحة كلمة المرور الذي أدخلها المستخدم ( وذلك لعملية تسجيل الدخول للبرنامج مثلاً )

الخطوات كالتالي :

كلمة المرور الصحيحة محفوظة في قاعدة البيانات بشكل مشفر ( تمام )

الآن يحاول المستخدم تسجيل الدخول للبرنامج :
بعد أن يقوم المستخدم بإدخال كلمة المرور
1 - تقوم بإعادة كل الخطوات المذكورة بالأعلى مع كلمة المرور الذي قام المستخدم بإدخالها
كود :
           Dim PasswordData As Byte() = System.Text.Encoding.UTF8.GetBytes(Me.PasswordTextBox.Text)
           Dim SHA512 As New System.Security.Cryptography.SHA512Managed
           Dim PasswordHash As Byte() = SHA512.ComputeHash(PasswordData)
إذا كانت نتيجة الإستعلام صفر ( لم يتم إرجاع اي سجل Row )
هذا يعني ( الرسالة المشهورة ) :

"    اسم المستخدم أو كلمة المرور غير صحيحة   "





الآن انت تمتلك كلمة مرور مشفرة ( التي يحاول المستخدم الآن إستخدامها لتسجيل الدخول  )

لعملية التحقق من صحة كلمة المرور المدخلة
تقوم بإرسال اسم المستخدم مع ( كلمة المرور المشفرة ) إلى قاعدة البيانات في إجراء مخزن مثلاً  وعمل إستعلام عادي
إذا قام الإستعلام بإرجاع نتيجة لك ( هذا يعني أنه وجد اسم المستخدم وكلمة المرور متطابقة ) والنتيجة عبارة عن سجل واحد ( Row ) ناتج من عملية الإستعلام

كود :
    SELECT Username FROM [dbo].[UsersTable]
WHERE [Username] = @UserName AND [Password] = @Password



تتم المقارنة بين كلمات المرور وهي في حالت التشفير
إذا تطابقت ( كلمة المرور المشفرة المدخلة ) مع ( كلمة المرور المشفرة الموجودة في قاعدة البيانات )


إذا دخلت على  ( SQL Server 2019 ) وعند عرضك للجدول في قاعدة البيانات
في الإستعلامات سيظهر الحقل بهذا الشكل
[attachment=27533]


في وضح التحرير سيظهر الحقل بهذا الشكل ( لأنه لا يمكنك تحرير حقل من نوع مصفوفة بشكل يدوي )
[attachment=27534]



هذة الطريقة الأأمن والأقوى المستخدمة في أغلب المواقع على شبكة الانترنت لحفظ كلمات المرور

أتمنى الفكرة تكون واضحة


RE: SQL 2019 - محمد بوقزاحة - 27-01-22

(26-01-22, 12:38 PM)عبدالله الدوسري كتب : بما انك تستخدم SQL DATABASE 2019

استخدم الطريقة :
HashAlgorithm.ComputeHash


أولاً تقوم بتحويل النص العادي (والتي هي كلمة المرور) : تحويلها من نص ( String ) إلى مصفوفة بايتات ( ()Byte )
كود :
Dim PasswordData As Byte() = System.Text.Encoding.UTF8.GetBytes(Me.PasswordTextBox.Text)



ثانياُ : تنشاء متغير باسم ( SHA512 ) من نوع ( System.Security.Cryptography.SHA512Managed )  
وذلك لإستخدام خوارزمية HashAlgorithm ( لتشفير البيانات في إتجاه واحد فقط غير قابل لفك التشفير )
كود :
Dim SHA512 As New System.Security.Cryptography.SHA512Managed


ثالثاً : نستخدم المتغير SHA512 لتشفير البيانات الموجودة في المصفوفة ( PasswordData ) وحفظها في متغير جديد باسم ( PasswordHash )
كود :
Dim PasswordHash As Byte() = SHA512.ComputeHash(PasswordData)



إذا كان صندوق النص ( Me.PasswordTextBox.Text ) يحمل القيمة ( vb4arb.com )
أي ان كلمة المرور = vb4arb.com
بعد عملية التشفير بواسطة الطريقة ComputeHash
النتيجة ستكون كالتالي : وذلك بعد التشفير
لاحظ ان النص الموجود بالأسفل يعبر عن شكل البيانات الموجودة في المصفوفة المشفرة
ولكن المصفوفة المشفرة أساساً ليسة بهذا الشكل ( قمت بتحويلها إلى نص وذلك حتى تتمكن من أخذ فكرة عن شكل الناتج )
كود :
45b6deacb27a617b889f1396da586270a131082c5ad83a9cd916aa72b07c296a43f33290aa9548f9d1b7fbbf169092ca8a25251ea461e688985451d5f8d77d39


******************************************************************************
الطريقة المستخدمة لعرض شكل المصفوفة بشكل نصي :  ( هذا النص البرمجي فقط لشرح شكل المصفوفة وغير مطلوب ,, تم إستخدامة فقط لعرض القيمة الموجودة بالأعلى)
كود :
Dim txt As String = BitConverter.ToString(PasswordHash).Replace("-", "")

******************************************************************************





الآن قم بحفظ قيمة المتغير ( PasswordHash ) والذي يحمل مصفوفة البيانات بعد التشفير
قم بحفظ القيمة في حقل قاعدة البيانات الخاص بكلمة المرور
ويكون نوع الحقل في قاعدة البيانات من نوع ( varbinary ) حصراً

الآن انت تمتلك كلمة مرور محفوظة في قاعدة البيانات ومشفرة ولا يمكن أبداً فك تشفيرها ( لأنها مشفرة بطريقة تشفير بإتجاه واحد ) 
إتجاه واحد يعني تشفير فقط ولا يمكن فك التشفير
بإتجاهين يعني تشفير ويمكن فك التشفير بالعكس


ماذا يمكنك الآن ان تفعل بهذا الحقل ؟؟؟؟
فقط يمكنك إستخدامة للمقارنة فقط

أي بمعنى :

إذا أردت ان تتحقق من صحة كلمة المرور الذي أدخلها المستخدم ( وذلك لعملية تسجيل الدخول للبرنامج مثلاً )

الخطوات كالتالي :

كلمة المرور الصحيحة محفوظة في قاعدة البيانات بشكل مشفر ( تمام )

الآن يحاول المستخدم تسجيل الدخول للبرنامج :
بعد أن يقوم المستخدم بإدخال كلمة المرور
1 - تقوم بإعادة كل الخطوات المذكورة بالأعلى مع كلمة المرور الذي قام المستخدم بإدخالها
كود :
           Dim PasswordData As Byte() = System.Text.Encoding.UTF8.GetBytes(Me.PasswordTextBox.Text)
           Dim SHA512 As New System.Security.Cryptography.SHA512Managed
           Dim PasswordHash As Byte() = SHA512.ComputeHash(PasswordData)
إذا كانت نتيجة الإستعلام صفر ( لم يتم إرجاع اي سجل Row )
هذا يعني ( الرسالة المشهورة ) :

"    اسم المستخدم أو كلمة المرور غير صحيحة   "





الآن انت تمتلك كلمة مرور مشفرة ( التي يحاول المستخدم الآن إستخدامها لتسجيل الدخول  )

لعملية التحقق من صحة كلمة المرور المدخلة
تقوم بإرسال اسم المستخدم مع ( كلمة المرور المشفرة ) إلى قاعدة البيانات في إجراء مخزن مثلاً  وعمل إستعلام عادي
إذا قام الإستعلام بإرجاع نتيجة لك ( هذا يعني أنه وجد اسم المستخدم وكلمة المرور متطابقة ) والنتيجة عبارة عن سجل واحد ( Row ) ناتج من عملية الإستعلام

كود :
    SELECT Username FROM [dbo].[UsersTable]
WHERE [Username] = @UserName AND [Password] = @Password



تتم المقارنة بين كلمات المرور وهي في حالت التشفير
إذا تطابقت ( كلمة المرور المشفرة المدخلة ) مع ( كلمة المرور المشفرة الموجودة في قاعدة البيانات )


إذا دخلت على  ( SQL Server 2019 ) وعند عرضك للجدول في قاعدة البيانات
في الإستعلامات سيظهر الحقل بهذا الشكل



في وضح التحرير سيظهر الحقل بهذا الشكل ( لأنه لا يمكنك تحرير حقل من نوع مصفوفة بشكل يدوي )




هذة الطريقة الأأمن والأقوى المستخدمة في أغلب المواقع على شبكة الانترنت لحفظ كلمات المرور

أتمنى الفكرة تكون واضحة
شكرا اخي الكريم 
الطريقة التي ابحث عنها سهلة جدا وهيا تشغيل  كود في sql  فقط
 Query
كود لتشفير كلمة السر  
وكود للعكس لاظهار كلمة السر 
هذا الكود يشتغل علي كافة المستخدمين بالجدول