Is it enough for protecting stored procedure code if user has
DENY VIEW ANY DATABASE
DENY VIEW ANY DEFINITION?
User is granted execute sp
It's not clear what your goal is: are you trying to protect intellectual property; prevent users from seeing sensitive information in source code (e.g. passwords); prevent users from ALTERing the procedures themselves, or something else? Are your users internal users in your own company or are they external customers? Do they host the database and the application or do you?
To protect intellectual property:
To prevent users seeing the source code:
To prevent users ALTERing the procedures:
In the end, a determined user with sysadmin permissions will always reverse-engineer, debug, decompile or otherwise uncover the logic in your code. So you need to be very clear about exactly what you're trying to prevent, what the potential impact is on you or your company, and how much time and money you're willing to invest in preventing it.