--------------
drop procedure if exists revokeprivs_
--------------

--------------
CREATE PROCEDURE revokeprivs_()
BEGIN
   DECLARE finished INTEGER DEFAULT 0;
   DECLARE membername varchar(18) DEFAULT "";

   DECLARE currevoke CURSOR FOR 
      select name
      from member_information;

   DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;

   OPEN currevoke;
   Mainloop: LOOP
      FETCH currevoke INTO membername;

      IF finished = 1 THEN 
         LEAVE Mainloop;
      END IF;

      

      set @quotedname = concat("'",membername,"'");
      set @cmmd = concat('grant select  on *.* to ',@quotedname,";");
      prepare stmt from @cmmd;
      execute stmt;
      select @cmmd;

      

      set @cmmd = concat('revoke all on *.* from ',@quotedname,";");
      prepare stmt from @cmmd;
      execute stmt;
      select @cmmd;

   END LOOP Mainloop;
   CLOSE currevoke;
END
--------------

--------------
call revokeprivs_()
--------------

grant select  on *.* to 'Jay Lee';
revoke all on *.* from 'Jay Lee';
grant select  on *.* to 'Jeff Lee';
revoke all on *.* from 'Jeff Lee';
grant select  on *.* to 'George Lee';
revoke all on *.* from 'George Lee';
--------------
flush privileges
--------------

--------------
drop procedure if exists giveprivs_
--------------

--------------
CREATE PROCEDURE giveprivs_()
BEGIN
   DECLARE finished   INTEGER DEFAULT 0;
   DECLARE membername varchar(18) DEFAULT "";
   DECLARE privname varchar(18) DEFAULT "";

   DECLARE curgive CURSOR FOR 
      select m.name, p.privilegename
         from member_information m, member_authorizations g,
            privileges_information p
         where m.memberID = g.memberID and g.nodeID = 0 and
            g.privilegeID = p.privilegeID;

   DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;

   OPEN curgive;
   Mainloop: LOOP
      FETCH curgive INTO membername, privname;

      IF finished = 1 THEN 
         LEAVE Mainloop;
      END IF;

      set @quotedname = concat("'",membername,"'");
      set @cmmd = concat('grant ',privname,' on *.* to ',@quotedname,";");
      prepare stmt from @cmmd;
      execute stmt;

      set @cmmd = concat('show grants for ',@quotedname,";");
      prepare stmt from @cmmd;
      execute stmt;

      select " ";
   END LOOP Mainloop;
   CLOSE curgive;
END
--------------

--------------
call giveprivs_()
--------------

GRANT SELECT ON *.* TO `George Lee`@`%`
 
GRANT SELECT ON *.* TO `Jeff Lee`@`%`
 
GRANT SELECT ON *.* TO `Jay Lee`@`%`
 
GRANT SELECT, INSERT ON *.* TO `Jay Lee`@`%`
 
--------------
flush privileges
--------------

