程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 在MySQL中根據規則生成隨機密碼

在MySQL中根據規則生成隨機密碼

編輯:MySQL綜合教程


在MySQL中根據規則生成隨機密碼   MySQL 5.0 以後的版本開始支持存儲過程,存儲過程具有壹致性、高效性和安全性。MySQL 5.0 之前的版本並不支持存儲過程,然而隨著 MySQL 技術的日趨完善,存儲過程將在以後的項目中得到 廣泛的應用。   在我的應用中,我需要在用戶首次注冊時為該帳號生成一個隨機密碼。所生成的密碼必須滿足一定的要求,這些要求由系統管理員進行配置。   我們提供了下面幾個對密碼的要求規則,這些規則可組合使用:   1- 要求大寫字母 UPPERCASE                =====> 縮寫 [U]  2- 要求小寫字母 LOWERCASE               =====> 縮寫 [L]  3- 要求使用數字 NUMBER                      =====> 縮寫 [N]  4- 可以是任意字符 ANY_CHARACTER   ======> 縮寫 [A]  5- 必須有非字母和數字的字符 NON_ALPHANUMERIC_CHARACTER =====> 縮寫 [S]   因此我想通過創建一個動態函數 "RANDOM_PASSWORD" 來根據要求返回隨機的密碼。   www.2cto.com   系統管理員只需要傳遞所需密碼的規則就會返回對應的隨機密碼。   例如要求如下:   首字符必須大寫             ======> U  第二個字符必須小寫       ======> L  第三個字符必須是數字    ======>N  第四個字符隨意             ======>A  第五個字符必須是非字母和數字  ======>S  第六個字符必須是數字    ======> N       那麼你可以使用 "ULNASN" 參數來獲取隨機密碼。  所生成的密碼程度跟傳遞的參數長度是一致的。在我們這個例子中生成的密碼長度是 6。 你可以使用下面的方法來調用這個函數:   1 RANDOM_PASSWORD('ULNASN') 在MySQL的控制台編寫函數定義前,先要將數據庫中可能已經存在的此函數定義刪除,然後須將分隔符更改為$,其實我本想將分隔符改成#,後來發現沒有成功,不知道是為什麼,在命令行下刪除 RANDOM_PASSWORD() 函數的定義與更改分隔符使用如下命令:   www.2cto.com   1 mysql> DROP FUNCTION IF EXISTS RANDOM_PASSWORD; 2 mysql> delimiter $ 接下來可以編寫該函數,經過我調試通過的源代碼如下:     01 CREATE FUNCTION RANDOM_PASSWORD (str VARCHAR(255)) 02 RETURNS VARCHAR(255) 03 BEGIN 04     DECLARE UPPER_CASE VARCHAR(26) DEFAULT 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 05     DECLARE LOWER_CASE VARCHAR(26) DEFAULT 'abcdefghijklmnopqrstuvwxyz'; 06     DECLARE NUMBERS VARCHAR(10) DEFAULT '0123456789'; 07     DECLARE TEMP_CHARACTER VARCHAR(255) DEFAULT ''; 08     DECLARE NON_ALPHANUMERIC_CHARACTERS VARCHAR(255) DEFAULT '~!@#$%^&*()_+-=`:;<>,.?/'; 09  www.2cto.com       DECLARE ALL_STRING VARCHAR(255) DEFAULT 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789~!@#$%^&*()_+-=`:;<>,.?/'; 10     DECLARE STR_LENGTH INT DEFAULT 0; 11     DECLARE i INT DEFAULT 0; 12     DECLARE RANDOM_CHARACTER CHAR(1) DEFAULT ' '; 13     DECLARE PASSWORD_RETURNED VARCHAR(255) DEFAULT ''; 14       15     SET STR_LENGTH = CHAR_LENGTH(str); 16       17     WHILE i < STR_LENGTH DO 18         SET TEMP_CHARACTER = SUBSTR(str, i + 1, 1); 19         CASE TEMP_CHARACTER 20             WHEN 'N' THEN 21                 SET RANDOM_CHARACTER = SUBSTR(NUMBERS, CEIL( RAND() * ( LENGTH( NUMBERS ) - 1 )), 1); 22             WHEN 'U' THEN 23                 SET RANDOM_CHARACTER = SUBSTR(UPPER_CASE, CEIL( RAND() * ( LENGTH( UPPER_CASE ) - 1 )), 1); 24  www.2cto.com               WHEN 'L' THEN 25                 SET RANDOM_CHARACTER = SUBSTR(LOWER_CASE, CEIL( RAND() * ( LENGTH( LOWER_CASE ) - 1 )), 1); 26             WHEN 'S' THEN 27                 SET RANDOM_CHARACTER = SUBSTR(NON_ALPHANUMERIC_CHARACTERS, CEIL( RAND() * ( LENGTH( NON_ALPHANUMERIC_CHARACTERS ) - 1 )), 1); 28             WHEN 'A' THEN 29                 SET RANDOM_CHARACTER = SUBSTR(ALL_STRING, CEIL( RAND() * ( LENGTH( ALL_STRING ) - 1 )), 1); 30             ELSE 31                 SET RANDOM_CHARACTER = ''; 32         END CASE; 33         SET PASSWORD_RETURNED = CONCAT(PASSWORD_RETURNED, RANDOM_CHARACTER); 34         SET i = i + 1; 35     END WHILE; 36       37     RETURN PASSWORD_RETURNED; 38 END 39 $ 使用方法: 1 mysql> select RANDOM_PASSWORD('ULNASN') PASSWORD; 2  www.2cto.com   +----------+ 3 | PASSWORD | 4 +----------+ 5 | Bv1n`8   | 6 +----------+ 7 1 row in set (0.00 sec) 在我這裡將返回的隨機密碼是:Bv1n`8   當然,你運行的結果可能不一樣,因為這是隨機的。     作者 Bairrfhoinn

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved