自己写的一个存储过程!一次性获取mysql所有用户的所有权限列表!
做权限列表统计的时候这个非常爽!
 

 
  
  1. DELIMITER $$ 
  2.  
  3. USE `mysql`$$ 
  4.  
  5. DROP PROCEDURE IF EXISTS `proc_GetUserPriv`$$ 
  6.  
  7. CREATE DEFINER=`root`@`%` PROCEDURE `proc_GetUserPriv`( 
  8.     ) 
  9.     COMMENT '获取账号权限信息列表' 
  10. BEGIN 
  11. # 获取用户总数,用于循环判断
  12.     SET @counts = (SELECT COUNT(*) FROM `user`); 
  13.  
  14.     SET @i = 1; 
  15.     WHILE (@i <= @counts) DO 
  16.      -- SELECT CONCAT(`user`,'@',"'",`host`,"'") INTO @sql2 FROM USER LIMIT 2, 
  17.      -- set @SQL1 =  concat('SELECT',CONCAT(`USER`,"@'",`HOST`,"'"),'into @SQL2 FROM USER LIMIT ',@i,",1");      -- 这句会导致错误 
  18.      SET @SQL1 = CONCAT('select concat(','"',"'",'"',',user,','"',"'",'"',',','"@',"'",'",host,"',"'",'")','  into @SQL2 from user limit ',@i,",1"); 
  19.      PREPARE smtm1 FROM @SQL1 ; 
  20.      EXECUTE smtm1; 
  21.      DEALLOCATE PREPARE smtm1; 
  22.      
  23.      
  24.      SET @sql3 = CONCAT("show grants for ",@SQL2); 
  25.      PREPARE smtm2 FROM @sql3; 
  26.      EXECUTE smtm2; 
  27.      DEALLOCATE PREPARE smtm2; 
  28.      SET @i = @i + 1; 
  29.     END WHILE; 
  30.     END$$ 
  31.  
  32. DELIMITER ; 

嘿嘿,其实上面这个存储过程还可以用游标来实现!
之所以没用游标,是想上面这种方法在某些方面可以替代游标!