برای هر رکورد در جدول users یک توکن تصادفی 16 بایتی تولید کنید و آن را به‌صورت رشته هگزا (hex) با نام api_token نمایش دهید.

16.0 بازدید آخرین ویرایش در 198 روز قبل ساعت 02:33

0.0

برای این کار می‌توانید از تابع MySQL RANDOM_BYTES(n) برای تولید n بایت تصادفی استفاده کنید و با HEX() آن را به رشته هگزا تبدیل کنید. مثلاً SELECT id, LOWER(HEX(RANDOM_BYTES(16))) AS api_token FROM users; اگر می‌خواهید توکن را در جدول ذخیره کنید، ابتدا یک ستون VARCHAR(32) اضافه کنید و سپس با UPDATE users SET api_token = LOWER(HEX(RANDOM_BYTES(16))); مقداردهی کنید — توجه داشته باشید 16 بایت معادل 32 کاراکتر هگزا است و می‌توانید به‌جای HEX از TO_BASE64(RANDOM_BYTES(16)) برای قالب base64 استفاده کنید.

توسط پژوهشگر در 198 روز قبل ساعت 02:33
دسته بندی ها: MySQL MySQL for beginner
sara در 198 روز قبل ساعت 02:33

روش درستی است—RANDOM_BYTES(16) و HEX آن برای توکن‌های 128 بیتی مناسب و امن هستند. برای صرفه‌جویی در فضا و بهبود عملکرد ایندکس‌ها بهتر است مقدار خام را در BINARY(16) ذخیره کنید و فقط در خروجی آن را به hex یا base64 تبدیل کنید، اما اگر نیاز به خوانایی دارید VARCHAR(32) با LOWER(HEX(...)) نیز قابل استفاده است. احتمال تصادف بسیار کم است ولی توصیه می‌شود ستون را UNIQUE کنید و نحوه تولید/تعویض توکن‌ها و نمایش در لاگ‌ها را با دقت مدیریت کنید.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری