title: Prevent User Usage of "dbo" in User Databases SQL Server
body: <p>I am attempting to prevent usage of the default schema of &quot;dbo&quot; in my SQL Server databases. This is being applied to an existing long term project with ongoing maintenance where the developers also manage the SQL Server (are all sysadmin).</p>
  <p>This is for the main reason to allow better dependency tracking between code and the SQL Server objects so that we can slowly migrate to a better naming convention. Eg. &quot;dbo.Users&quot;, &quot;dbo.Projects&quot;, &quot;dbo.Categories&quot; in a DB are nearly impossible to find in code once created because the &quot;dbo.&quot; is often left out of SQL Syntax.</p>
  <p>However a proper defined schema requires the usage in code. Eg. &quot;Tracker.Users&quot;, &quot;Tracker.Projects&quot;, etc ...</p>
  <p>Even though we have standards set to not use &quot;dbo&quot; for objects it is still accidentally occurring due to management/business pressures for speed to develop.</p>
  <p><em>Note: I'm creating this question simply to provide a solution someone else can find useful</em></p>
  <p><em>EDIT: As pointed out, for non-sysadmin users the security option stated is a viable solution, however the DDL Trigger solution will also work on sysadmin users. The case for many small teams who have to manage there own boxes.</em></p>