Try to create a new role as shown below and assign the user to the role. Assign the user permissions to read data (GRANT SELECT) and execute programming objects.
CREATE ROLE [db_executor] AUTHORIZATION [dbo]
GO
GO GRANT SELECT TO [db_executor]
GRANT ALTER ON SCHEMA::[dbo] TO [db_executor];
GRANT EXECUTE TO [db_executor]
GO
GRANT CREATE VIEW TO [db_executor];
GO
GRANT CREATE PROCEDURE TO [db_executor];
GO
GRANT CREATE FUNCTION TO [db_executor];
GO
ALTER ROLE db_executor ADD MEMBER MyUser;