تولید Password امن با Stored Procedure در SQL Server

ایجاد Password تصادفی و امن در SQL Server با Stored Procedure

امنیت آنلاین امروزه اهمیت فزاینده‌ای پیدا کرده است. یکی از بهترین روش‌ها برای افزایش امنیت، استفاده از رمزهای عبور (Password) قوی و تصادفی است. در این مقاله به شما نشان می‌دهیم چگونه یک Stored Procedure در SQL Server ایجاد کنید تا رمزهای عبور تصادفی با قابلیت سفارشی‌سازی تولید کند. این روش برای سیستم‌های مدیریت کاربر، برنامه‌های نیازمند رمز عبور موقت یا هر جایی که به یک راهکار امن برای تولید رمز عبور نیاز دارید، بسیار مفید است.

برای ایجاد یک رمز عبور تصادفی، باید یک حلقه (loop) بسازیم که به تعداد دلخواه کاراکتر تولید کند. هر کاراکتر می‌تواند از چهار نوع باشد: حروف کوچک، حروف بزرگ، اعداد و کاراکترهای خاص.

ابتدا، متغیرهایی که برای ذخیره طول رمز عبور، کاراکترهای مجاز خاص و کاراکتر تولید شده در هر مرحله از حلقه نیاز داریم را تعریف می‌کنیم:


DECLARE @PasswordLength INT
DECLARE @SpecialChars VARCHAR(50)
DECLARE @char VARCHAR(1)

متغیر `@SpecialChars` را می‌توانیم با هر کاراکتر خاصی که می‌خواهیم در رمز عبور داشته باشیم مقداردهی کنیم. به عنوان مثال:


SET @SpecialChars = '!@#$%^&*()-_+=,./?;:[]{}\|`~'

برای تولید یک حرف کوچک تصادفی، از تابع `RAND()` به همراه توابع `FLOOR()` و `CHAR()` استفاده می‌کنیم. `RAND()` یک عدد تصادفی بین 0 و 1 می‌دهد که با 26 (تعداد حروف الفبا) ضرب شده و سپس با 97 (کد اسکی حرف ‘a’) جمع می‌شود. `CHAR()` آن عدد را به کاراکتر مربوطه تبدیل می‌کند.


SET @char = CHAR(FLOOR(RAND() * 26) + 97)

به همین ترتیب، برای تولید یک حرف بزرگ تصادفی:


SET @char = CHAR(FLOOR(RAND() * 26) + 65)

برای تولید یک عدد تصادفی:


SET @char = CHAR(FLOOR(RAND() * 10) + 48)

و برای تولید یک کاراکتر خاص از رشته `@SpecialChars`، از تابع `SUBSTRING()` استفاده می‌کنیم تا یک کاراکتر تصادفی را از بین کاراکترهای تعریف شده انتخاب کند:


SET @char = SUBSTRING(@SpecialChars, FLOOR(RAND() * 27) + 1, 1)

با ترکیب این منطق در یک حلقه `WHILE` و استفاده از تابع `RAND()` برای انتخاب تصادفی بین چهار نوع کاراکتر (حروف کوچک، بزرگ، اعداد، کاراکترهای خاص)، می‌توانیم یک Stored Procedure کامل برای تولید رمز عبور ایجاد کنیم.

کد کامل Stored Procedure `usp_GeneratePassword` در اینجا آورده شده است. این Stored Procedure یک پارامتر برای تعیین طول رمز عبور (`@length`) و یک پارامتر برای تعیین استفاده از کاراکترهای خاص (`@usespecialchars`) می‌پذیرد:


CREATE PROCEDURE usp_GeneratePassword
    @length INT = 12,
    @usespecialchars BIT = 1
AS
BEGIN
    DECLARE @charCounter INT
    DECLARE @Password VARCHAR(100)
    DECLARE @char VARCHAR(1)
    DECLARE @SpecialChars VARCHAR(50)

    -- Define special characters
    SET @SpecialChars = '!@#$%^&*()-_+=,./?;:[]{}\|`~'

    -- Initialize variables
    SET @charCounter = 0
    SET @Password = ''

    -- Loop to generate each character of the password
    WHILE @charCounter < @length
    BEGIN
        -- Generate a random number to decide character type
        -- 1 = lower case, 2 = upper case, 3 = number, 4 = special char
        DECLARE @randomchar INT
        SET @randomchar = FLOOR(RAND() * 4) + 1

        IF @randomchar = 1
        BEGIN
            -- Lower case character
            SET @char = CHAR(FLOOR(RAND() * 26) + 97)
        END
        ELSE IF @randomchar = 2
        BEGIN
            -- Upper case character
            SET @char = CHAR(FLOOR(RAND() * 26) + 65)
        END
        ELSE IF @randomchar = 3
        BEGIN
            -- Number character
            SET @char = CHAR(FLOOR(RAND() * 10) + 48)
        END
        ELSE IF @randomchar = 4
        BEGIN
            -- Special character (only if @usespecialchars is true)
            IF @usespecialchars = 1
            BEGIN
                SET @char = SUBSTRING(@SpecialChars, FLOOR(RAND() * LEN(@SpecialChars)) + 1, 1)
            END
            ELSE
            BEGIN
                -- If special chars are not allowed, default to a letter/number
                SET @char = CHAR(FLOOR(RAND() * 26) + 97) -- Fallback to lowercase
            END
        END

        SET @Password = @Password + @char
        SET @charCounter = @charCounter + 1
    END

    SELECT GeneratedPassword = @Password
END

پس از ایجاد این Stored Procedure، می‌توانید آن را به سادگی اجرا کرده و رمز عبورهای تصادفی و امنی تولید کنید. این ابزار به شما کمک می‌کند تا امنیت برنامه‌های کاربردی و داده‌های خود را در محیط SQL Server بهبود بخشید.

برای استفاده از این Stored Procedure و تولید یک رمز عبور تصادفی:

برای تولید یک رمز عبور با طول پیش‌فرض 12 کاراکتر و شامل کاراکترهای خاص:


EXEC usp_GeneratePassword

برای تولید یک رمز عبور 10 کاراکتری شامل کاراکترهای خاص:


EXEC usp_GeneratePassword @length = 10

برای تولید یک رمز عبور 15 کاراکتری بدون کاراکترهای خاص:


EXEC usp_GeneratePassword @length = 15, @usespecialchars = 0

این Stored Procedure یک راهکار قدرتمند برای افزایش امنیت با تولید رمزهای عبور پیچیده و غیرقابل پیش‌بینی در SQL Server است.

**بهبودهای احتمالی:**

برای بهبود بیشتر این Stored Procedure، می‌توانید موارد زیر را در نظر بگیرید:

* **پارامترهای بیشتر برای کنترل انواع کاراکترها:** می‌توانید پارامترهایی اضافه کنید تا کاربر بتواند انتخاب کند که آیا حروف کوچک، بزرگ، اعداد یا کاراکترهای خاص در رمز عبور گنجانده شوند یا خیر.
* **اطمینان از وجود حداقل یک نوع کاراکتر:** می‌توانید منطقی اضافه کنید تا اطمینان حاصل شود که رمز عبور حداقل شامل یک حرف بزرگ، یک حرف کوچک، یک عدد و یک کاراکتر خاص (در صورت فعال بودن) باشد.
* **افزایش تنوع کاراکترهای خاص:** می‌توانید رشته `@SpecialChars` را گسترش دهید تا شامل طیف وسیع‌تری از کاراکترهای خاص باشد.
* **استفاده از `NEWID()` و `HASHBYTES()` برای تصادفی‌سازی قوی‌تر:** برای تصادفی‌سازی با کیفیت بالاتر، می‌توانید از ترکیب `NEWID()` و `HASHBYTES(‘MD5’, NEWID())` برای تولید Seed برای `RAND()` استفاده کنید، اما به یاد داشته باشید که `RAND()` هر بار که فراخوانی می‌شود، نیازمند Seed جدید است تا واقعاً تصادفی عمل کند. استفاده از `RAND(CHECKSUM(NEWID()))` می‌تواند در این زمینه کمک کند.

 

من علی دستجردی‌ام؛ عاشق کار با دیتا، از SQL Server تا بیگ‌دیتا و هوش مصنوعی. دغدغه‌ام کشف ارزش داده‌ها و به‌اشتراک‌گذاری تجربه‌هاست. ✦ رزومه من: alidastjerdi.com ✦

عضویت
منو باخبر کن!!!
guest
نام
ایمیل

0 دیدگاه
Inline Feedbacks
دیدن تمامی کامنتها

فوتر سایت

ورود به سایت

sqlyar

هنوز عضو نیستید؟

ورود به سایت

هنوز تبت نام نکردید ؟