For third question, you can write a DDL trigger to prevent permission of any DDL of procedure as follows:
CREATE TRIGGER [block_ddl]
ON DATABASE
FOR ALTER_PROCEDURE, DROP_PROCEDURE[,
ALTER_TABLE, DROP_TABLE,
ALTER_FUNCTION, DROP_FUNCTION,
ALTER_INDEX, DROP_INDEX,
ALTER_VIEW, DROP_VIEW,
ALTER_TRIGGER, DROP_TRIGGER]
AS
BEGIN
-- RAISE error so that we can prevent drop procedure
END
EDIT: Check the following link for further information
http://www.mssqltips.com/sqlservertip/2646/using-a-ddl-trigger-to-block-schema-changes-in-sql-server/
--
Chandu