Bug #70903 Forward Engineer SQL Script disregards "Do Not Create Users" instruction
Submitted: 13 Nov 2013 20:45 Modified: 17 Dec 2013 8:45
Reporter: Daniel Burrell Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Workbench Severity:S3 (Non-critical)
Version:6.0.7.11215, 6.0.8 OS:Windows
Assigned to: CPU Architecture:Any

[13 Nov 2013 20:45] Daniel Burrell
Description:
Given a model, when forward engineering to a script file, selecting the checkbox titled "Do not create users, only export privileges" results in the following user-creation code:

GRANT USAGE ON *.* TO pwanted;
 DROP USER pwanted;
SET SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
CREATE USER 'pwanted';

How to repeat:
Create a model with a user given a role with execute on some stored procedures.

File -> Export -> Forward Engineer....

Ensure the following boxes are ticked:

Generate Drop statements
Generate Drop Schema
..
..
..
..
Generate Separate Create Indexes
..
Do Not Create users. Only Export Privileges
..
..
..
..

Click next

Check Export MySQL Table, Routine, User Objects

Click next.

Notice at the bottom, just above the permissions the code I gave in the description is present.

Suggested fix:
The fix would be such that the following

DELIMITER ;
SET SQL_MODE = '';
GRANT USAGE ON *.* TO pwanted;
 DROP USER pwanted;
SET SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
CREATE USER 'pwanted';

GRANT EXECUTE ON procedure `wanted`.`addDetail` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`addSchemaItem` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`addSchemaVersion` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`createNewUser` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`deleteDetail` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`editState` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`getSchema` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`getWantedList` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`getWelcomeStatus` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`updateUserItems` TO 'pwanted';

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

Would simply become

DELIMITER ;
GRANT USAGE ON *.* TO pwanted;
GRANT EXECUTE ON procedure `wanted`.`addDetail` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`addSchemaItem` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`addSchemaVersion` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`createNewUser` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`deleteDetail` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`editState` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`getSchema` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`getWantedList` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`getWelcomeStatus` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`updateUserItems` TO 'pwanted';

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
[13 Nov 2013 20:51] Daniel Burrell
Added example model file.
[14 Nov 2013 8:46] MySQL Verification Team
Hello Daniel,

Thank you for the bug report.
Verified as described.

Thanks,
Umesh
[12 Dec 2013 17:58] Armando Lopez Valencia
Posted by developer:
 
Fixed
Verified in:
Windows 8x64
Ubuntu 13.10x64
WB 6.1.0.11483
This is the code generated by WB:
DELIMITER ;
GRANT EXECUTE ON procedure `wanted`.`addDetail` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`addSchemaItem` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`addSchemaVersion` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`createNewUser` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`deleteDetail` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`editState` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`getSchema` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`getWantedList` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`getWelcomeStatus` TO 'pwanted';
GRANT EXECUTE ON procedure `wanted`.`updateUserItems` TO 'pwanted';
[17 Dec 2013 8:45] Philip Olson
Executing <guimenu>Model</guimenu>, <guimenu>Forward
        Engineering</guimenu> with the <guilabel>Do not create users,
        only export privileges</guilabel> option enabled would recreate
        the user instead of simply changing privileges for the existing
        user.