SQL Server 2012: Give rights to read ddl but not modify?
You can give VIEW DEFINITION at the object, schema or database level.

GRANT VIEW DEFINITION ON dbo.objectname TO [user/role];

GRANT VIEW DEFINITION ON SCHEMA::schemaname TO [user/role];

GRANT VIEW DEFINITION ON DATABASE::databasename TO [user/role];


http://msdn.microsoft.com/en-us/library/ms173848.aspx