Today I was checking an older server and decided to run sp_helpdb. On a bunch of databases I noticed that the owner was ~~UNKNOWN~~. The only reason I noticed this was when I tried to look at a specific database which is mirrored. I was greeted with this dialog box

Cannot show requested dialog.

Additional information:
Cannot show requested dialog.(SqlMgmt)
Property Owner is not available for Database'[Your Database Name]’. This property may not exist for this
object, or may not be retrievable due to insufficient access rights. (Microsoft.SqlServer.Smo)

What does this mean, was the server hacked and someone changed the owner? No, what this means is that the owner of the database was a windows account which no longer exists, the person probably left and the account was removed.

All you have to do is change the owner to a valid login

If you want it to be sa or a sql login, this example is for sa, change sa to something else if you want a different sql login

T-SQL
1
ALTER AUTHORIZATION ON DATABASE::[YourDatabase] TO [sa];
ALTER AUTHORIZATION ON DATABASE::[YourDatabase] TO [sa];

If you want it to be a windows login, you can do the following

T-SQL
1
ALTER AUTHORIZATION ON DATABASE::[YourDatabase] TO [DomainLogin];
ALTER AUTHORIZATION ON DATABASE::[YourDatabase] TO [DomainLogin];

If you run sp_helpdb now, you will see that the owner has been changed

If you are old school, you can also use sp_changedbowner to make the change

T-SQL
1
2
3
4
USE YourDatabase
GO
 
EXEC sp_changedbowner 'sa'
USE YourDatabase
GO

EXEC sp_changedbowner 'sa'