الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تشفير البيانات الحساسة في SQL Server

مغلق
بدأه وليد محمد الحسن في 23 يوليو 2006 · 5 رد · 4,620 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

توجد دالتين غير موثقتين undoumented functions لتشفير كلمات السر ومقارنتها وهي مشفرة.

الدالة الخاصة بتشفير كلمات السر pwdencrypt، وهي عبارة عن one way hash function تأخذ نصا كparameter وترجع النسخة المشفرة للنص.

الدالة الخاصة بمقارنة كلمات السر المشفرة pwdcompare وتقارن النص غير المشفر مع نسخته المشفرة، فإذا تساويا ترجع true وإلا ترجع false

مثال للاستعمال:

select len(pwdencrypt('123')) as EncryptedLength

طول النص المشفر 46 حرف، مهما كان طول النص الأصلي.

للمقارنة:

select pwdcompare('123', pwdencrypt('123'))

ترجع 1 أي true

select pwdcompare('123', pwdencrypt('124'))

ترجع 0 أي false

فكر بطريقة أخرى

#2

اخي العزيز walcom

اشكرك علي هذا الموضوع ...

فعلا موضوع مهم كنت في امس الحاجة اليه :)

#3

هناك ايضا الدالة encrypt

select encrypt(124)

حيث تقوم بتشفير البيانات المدخلة لها

و لكن على ما يبدوا انّ دالة pwdencrypt تقوم بتشفير البيانات بطريقة اعقد من encrypt

شكرا لك walcom على المعلومة المفيدة :)

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#4

مسئلة تشفير البيانات تم اضافتها مع الاصدار SQL SERVER2005 حيث يمكن تشفير البيانات من دون الاستعانة باى برامج خارجية،وهناك عدة طرق مدعومة من خلالSQL SERVER 2005 :

Password encryption1-:وهى ابسط الانواع واقلها امان ويتم تشفير البيانات بناء على كلمة سر من المستخدم،،

يتم تشفير البيانات باستدعاء الدالة EncryptByPassPhrase() وفك الشفير بالدالةDecryptByPassPhrase() هذه الدوال تاخذ وسيطتين الاولى كلمة المرور،والثانية تكون اما النص المراد تشفيره او العكس،،

مثال:

DECLARE @TextToEncrypt varchar(20),
@pass varchar(255),
@cipherText varchar(1000),
@clearText varchar(1000);
SET @TextToEncrypt = 'SOLO.NET';
SET @pass = 'fe34&*$PO2hs';
SET @cipherText = EncryptByPassPhrase(@pass, @TextToEncrypt);
PRINT 'Cipher text = ' + @cipherText;

SET @clearText = DecryptByPassPhrase(@pass, @cipherText);
PRINT 'Clear text = ' + @clearText;

symmetric key encryption2:التشفير الغير متناظر ويتم باستخدام مفتاح واحد لتشفير وفك تشفير البيانات،،،

اولا يجب انشاء المفتاح وتحديد الخوارزم ويتم انشاء المفتاح بالجملة CREATE SYMMETRIC KEYكالتالى:

CREATE SYMMETRIC KEY MyKey
WITH ALGORITHM = TRIPLE_DES
ENCRYPTION BY PASSWORD = 'fe34&*$PO2hs';

ويمكن تحديد الخورازميات التالية لانشاء المفتاحDES, TRIPLE_DES, RC2, RC4, DESX, AES128,

AES192, AES256

ولاستخدام هذا المفتاح يتم ذلك بالجملة OPEN SYMMETRIC KEY

الدالتان EncryptByKey()وDecryptByKey() تستخدم لتشفير وفك التشفير الاولى تاخد معرف مفرد guid للفتاح

مثال :

CREATE SYMMETRIC KEY MyKey
WITH ALGORITHM = TRIPLE_DES
ENCRYPTION BY PASSWORD = 'fe34&*$PO2hs';
DECLARE @keyGuid UNIQUEIDENTIFIER,
@text varchar(20),
@password varchar(255),
@cipherText varchar(1000),
@clearText varchar(1000);
SET @keyGuid = Key_GUID('MyKey');
SET @text = 'solo.net';
OPEN SYMMETRIC KEY MyKey
DECRYPTION BY PASSWORD = 'fe34&*$PO2hs';
SET @cipherText = EncryptByKey(@keyGuid, @text);
PRINT 'Cipher text = ' + @cipherText;
SET @clearText = DecryptByKey(@cipherText);
PRINT 'Clear text = ' + @clearText;
CLOSE SYMMETRIC KEY MyKey;

:Asymmetric Key Encryption3

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

CREATE ASYMMETRIC KEY PpeKey
WITH ALGORITHM = RSA_512
ENCRYPTION BY PASSWORD = 'fe34&*$PO2hs';

الخوارزميات المتاحة للاستخدام RSA_512, RSA_1024, RSA_2048.

مثال على الاستخدام:

DECLARE @keyId int,
@text varchar(20),
@password varchar(255),
@cipherText varchar(1000),
@clearText varchar(1000);
SET @keyId = AsymKey_ID('PpeKey');
SET @text = 'solo.net';
SET @cipherText = EncryptByAsymKey(@keyId, @text);
PRINT 'Cipher text = ' + @cipherText;
SET @clearText = DecryptByAsymKey(@keyId, @cipherText,
CAST('fe34&*$PO2hs' AS nvarchar));
PRINT 'Clear text = ' + @clearText;

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#5

المشكلة اننا ما نزال نعمل على SQL Server 2000 و ليس من السهل تبديله ب 2005

فعلا SQL Server 2000 ضعيف جدا في مسألة تشفير البيانات فاوراكل و db/2 افضل كثير منه في مجال الحماية

فالتابعان الذان ذكرهما الاخ walcom في الاعلى غير موثوقين نهائيا و لا انصح احد باستخدامهما نهائيا و ذلك لانهما يتغيران من نسخة الا اخرى

يعني اليوم تشفر نص يطلع ABC في نسخة اخرى يمكن يطلع MNB :huh: و قد يحصل معك خطأ ما باستخدامها او تحصل مشكلة ما و بما أنهما غير موثقتين فبالتالي لن تحصل على دعم من مايكروسوفت عنهما اي سوف يكون استخدامك لهما على مسأوليتك الشخصية :unsure:

الحل مع SQL Server 2000 بعد الكثير الكثير من البحث وجدت ما يلي:

1- و هو باستخدام third party solutions for encryption on SQL مثل ما يلي

www.whamware.com او www.activecrypt.com

او http://www.xpcrypt.com/

ملحوظة لم اقوم بتجريب ما تم ذكره

2- ان يقوم تطبيقك هو بتشفير البيانات و يتم عمل Insert لها بعد ذلك داخل قاعدة البيانات و يتم التشفير هنا باستخدام خوارزمية ما و هذا ما يتم النصح به عادة

و لكن يجب عليك اما بناء خوارزمية التشفير الخاصة بك او استخدام خوارزميات تشفير API من مايكروسوفت على الرابط التالي

http://msdn.microsoft.com/library/default....y_reference.asp

انا قمت بتشفير البيانات باستخدام خوارزمية من برمجتي و ظهرت لي المشكلة التي في الرابط التالي:

/index.ph...st&p=545969

قد يكون الحل باستخدام خوارزمية اخرى سوف نرى!

3- هناك طريقة باستخدام ODBC Encrypt function ولكن لا يمكن فك تشفيرها و لا اعرف شيئ عن هذه الطريقة

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#6

الاخوة مشكورين على المداخلات الموضوعية الرائعة فعلا

لكن يبقى السؤال كيف نشفر كلمة السر أساسا ، فمثلا لدي حقل اسمه كلمة مرور كيف ممكن أشفره بدون أي برامج أو أكواد اتصال مع .NET او غيره..

وشكرا لكم جميعااا

موقوف من المشاركة لقلة الأدب

============================

هذا الموضوع مغلق.

مواضيع مشابهة