Faking the dbo role

Long-time users of SQL Server will be familiar with the dbo user. This is a special user that's present in all databases, and represents the database owner - regardless of who that is. Another special thing about it is that all users of the server role System Administrators will be mapped to this user as well. A third special thing is that unlike all other objects, those owned by dbo don't need to be qualified with the owner (think schema) name before they are accessed.

Now, there are a lot of legacy applications out there that depend on this behavior. To make those work, you often have to deal with these three issues. There are obviously a lot of other things to deal with as well, but those are not on the topic of this post.

The first part is easy. Just GRANT the dbo role to the users as needed.

The third part is also easy - use the public schema instead. Make sure that the dbo role has permissions to write to this schema. This will work as long as the application doesn't schema-qualify the names. If it does, you'll need to create a schema called dbo and grant permissions on it to the dbo role.

I've previously had problems with the second part, until I tried something that's actually fairly obvious once you think about it. But I never did before, so here goes. When user joe logs in, even if you grant him CREATE permissions on the public schema, anything he creates will end up owned by joe and not dbo. To get around this, just run the following command for all users:

ALTER USER joe SET ROLE dbo;

That way, whenever joe logs in, the current role will be automatically switched to dbo, and all objects created will be properly owned by dbo.


Add comment

New comments can no longer be posted on this entry.

Conferences

I speak at and organize conferences around Open Source in general and PostgreSQL in particular.

Upcoming

PGConf.EU 2026
Oct 20-23, 2026
Valencia, Spain
FOSDEM PGDay 2027
Jan 28-31, 2027
Brussels, Belgium
Nordic PGDay 2027
Mar 16, 2027
Stockholm, Sweden

Past

PGDay Lowlands 2026
Sep 10, 2026
Utrecht, Netherlands
PGDay.UK 2026
Sep 8, 2026
London, UK
pgconf.dev 2026
May 19-22, 2026
Vancouver, Canada
pgDay.paris 2026
Mar 26, 2026
Paris, France
Nordic PGDay 2026
Mar 24, 2026
Helsinki, Finland
More past conferences