If you give them administrator rights (general), then you cannot stop them. However, there are some great tools, such as RedGate SQL Compare, that allow you to compare two database schemas (for example, a snapshot of what it should be against what it is now), and it will instantly tell you if there are any any changes, and what they are.
If you know that the user is going to add their own material, tell them some basic rules, for example, if they are going to add tables, add some kind of prefix to the name of the table, which designates it as his. The same thing works for stored procs ... if they add new ones, add them with some kind of prefix to indicate them.
If you want to give them the opportunity to change the functionality of your stored processes or add columns to their tables, you need to do some projects in advance. You can take each of your tables, such as TableA, and add a child tableA TableA_User with a one-to-one relationship. This table contains any user data that you can allow them to access this main table. You can also give them predefined hooks to change the functionality of your business logic. For example, every time you add a new such-and-such line, you can call the stub of the stored procedure, which transfers the data of the new line, and they can change it before storing it in the database. Obviously, this is getting complicated quickly.
The best way to handle this is to stay responsive with your client. If they want change, quickly implement them and pay for them.
source share