Thank you very much. You're proof of concept worked for me, and showed me that what I would like to do is possible. That said, while the proof of concept worked in the "test" DB on my system, it is not working in my user-defined DB. As I showed in my original post the user I want to allow to view procedure definitions has SELECT rights on * in my user-defined DB and yet still cannot view procedure definitions. Are there any other database-level permissions I should look at? Any other ideas?
As an aside, while playing around with the proof of concept code I ran across some odd behavior that appears to be a bug in the REVOKE command, or maybe the test DB is a special DB and it is of no concern. After issuing the proof of concept commands from your post if I then issue this:
REVOKE SELECT on *.* FROM user1@'%';
GRANT SELECT ON my_user_defined_db.* TO user1@'%';
SHOW GRANTS FOR user1@'%';
Resulting in:
GRANT USAGE ON *.* TO 'user1'@'%' IDENTIFIED BY PASSWORD '*HIDDDENHASH'
GRANT SELECT ON `my_user_defined_db`.* TO 'user1'@'%'
I find that even after disconnecting and reconnecting user1 still has rights to view procedure definitions in the test DB.