مقدمهای بر توابع تولید اعداد تصادفی در SQL Server
در محیط T-SQL، مایکروسافت سه تابع (rand، newid و crypt_gen_random) را برای تولید اعداد تصادفی در اختیار توسعهدهندگان قرار داده است. هر یک از این توابع در بازگرداندن مقادیر تصادفی مؤثر هستند، اما مجموعه ویژگیهای مرتبط با هر تابع، آنها را برای موارد استفاده مختلف مناسب میسازد. هدف اصلی این توابع، تولید دنبالهای از مقادیر است به گونهای که مقدار فعلی از مقدار(های) قبلی در یک سری قابل پیشبینی نباشد. این توابع الگوریتمهای مولد شبه تصادفی (Pseudorandom Generator Algorithms) متفاوتی را پیادهسازی میکنند که هر کدام از روشهای مختلفی برای تقلید از فرآیندهای تصادفی فیزیکی، مانند پرتابهای متوالی یک تاس سالم، استفاده میکنند. این توابع روشی راحتتر از ثبت نتایج فرآیندهای فیزیکی برای تولید دنبالههای تصادفی ارائه میدهند.
یکی از ویژگیهای مورد انتظار از توابع تولید اعداد تصادفی در T-SQL، بازگرداندن مقادیری با توزیع احتمال یکنواخت (Uniform Probability Distribution) است. به عنوان مثال، اگر مجموعه اعداد مورد استفاده در یک برنامه 1، 2، 3، 4، 5 و 6 باشد، انتظار میرود که هر یک از این شش مقدار تقریباً به یک اندازه رخ دهند.
موارد استفاده از اعداد تصادفی در SQL Server
کاربردهای متنوعی برای اعداد تصادفی در SQL Server وجود دارد. یکی از کاربردهای رایج، تولید مقادیر شناسه (Identifier Values) برای مجموعهای از اشیاء، مانند ردیفهای یک جدول در سرور یا ردیفهای جداول در چندین سرور است. استفاده از یک مقدار تصادفی به عنوان شناسه، به جای هر نوع مقدار ستون دیگر، تضمین میکند که شناسهها با مقادیر هیچ ستون دیگری از جدول همبستگی ندارند.
نوع کاربرد کلاسیک دیگر که به مقادیر تصادفی نیاز دارد، کلیدهای رمزنگاری (Cryptographic Keys) هستند که امکان رمزگذاری (Encryption) و رمزگشایی (Decryption) مقادیر در یک جدول را فراهم میکنند. نمونههایی از مقادیری که ممکن است نیاز به رمزگذاری داشته باشند شامل شماره کارت اعتباری و گذرواژههای کارمندان است. رمزگذاری از دادهها حتی پس از استخراج آنها توسط مهاجم از یک منبع داده محافظت میکند. رمزگشایی تضمین میکند که فقط افراد دارای کلید مناسب میتوانند دادههای رمزگذاری شده را به شکل رمزگذاری نشده خود بازگردانند.
امضاهای دیجیتال (Digital Signatures) وسیلهای برای اطمینان از عدم دستکاری مقادیر متنی در SQL Server توسط مهاجم و تضمین اصالت امضاکننده ارائه میدهند. همانند رمزگذاری و رمزگشایی، اعمال یک امضای دیجیتال بر یک مقدار متنی به مقادیر تصادفی رمزنگاری شده برای کلیدهایی نیاز دارد که یک امضای دیجیتال را به یک مقدار فیلد متنی در یک جدول اعمال میکنند.
مقایسه توابع تولید اعداد تصادفی در SQL Server
تابع rand
- یک مقدار ممیز شناور (Floating-Point Value) بین 0 و 1 بازمیگرداند.
- به طور کلی سریع و کارآمد است.
- بازگرداندن مقدار یکتا (Unique Return Value) به یک پرس و جوی مشابه (مگر اینکه با مقدار اولیه (Seeded) متفاوت فراخوانی شود) را تضمین نمیکند.
- بهترین موارد استفاده: شبیهسازیها (Simulations)، تولید دادههای نمونه تصادفی (Generating Random Sample Data) و وظایف تصادفیسازی اساسی (Basic Randomization Tasks).
تابع newid
- یک مقدار از نوع دادهای
uniqueidentifier بازمیگرداند که بیتهای آن معمولاً به صورت xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx نمایش داده میشوند، که در آن هر x یک کاراکتر هگزادسیمال (0-9 و A-F) است. - به دلیل پیچیدگی بازگرداندن یک شناسه یکتا (GUID)، عملکرد آن کمی کندتر از تابع
rand است. - خروجی بسیار یکتا در فضا و زمان بازمیگرداند و آن را برای تولید شناسههای یکتا در بسیاری از زمینههای مختلف مناسب میسازد.
- بهترین موارد استفاده: تولید شناسههای یکتا برای رکوردها، تضمین یکتایی در سطح پایگاه داده (Database-Wide Uniqueness) و ایجاد کلیدهای یکتا (Unique Keys).
تابع crypt_gen_random
- یک مقدار
varbinary با قدرت رمزنگاری بالا برای طول بایت تعریف شده توسط توسعهدهنده بازمیگرداند. - به دلیل محاسبات رمزنگاری مورد نیاز برای بازگرداندن مقدار، عملکرد آن کندتر از تابع
rand است. - به دلیل قدرت رمزنگاری مقدار بازگردانده شده، خروجی بسیار یکتا بازمیگرداند.
- بهترین موارد استفاده: تولید مقادیر تصادفی ایمن از نظر رمزنگاری (Cryptographically Secure Random Values) مانند گذرواژهها، کلیدها و سایر دادههای تصادفی مرتبط با امنیت.
مشاهده مطلب اصلی