Permissions to see and script objects, but not alter them?
You will need VIEW DEFINITION on the database and that will give you access to the DDL.

USE &lt;database&gt;;
GRANT VIEW DEFINITION TO &lt;user&gt;;