You'll need to do the following:
- Create a user defined role to assign permissions to.
- Grant CREATE PROCEDURE to that role.
- Grant CREATE FUNCTION to that role.
- Grant ALTER on all schema in each database to that role.
- Create a DDL trigger that checks to see if you're a member of the role and if you're not touching a stored procedure or function, it rolls back the DDL command that was issued.
You'll need to do that for every DB you wish to grant such access in.
K. Brian Kelley
@kbriankelley