Recently I worked on an issue in which the jobs which were running fine started failing all of the sudden. The job history had the following error message.
Cannot execute as the database principal because the principal "dbo" does not exist this type of principal cannot be impersonated or you do not have permission
But the principal “dbo” exists, it can be impersonated and I have permission because I am the sysadmin! Now what changed?
Checked the job properties and “sa” was the job owner. This job was last modified a few years ago. The next step is to find out the properties of the database against which the job is executing the queries.
When I right clicked on the database and selected properties, got the following error.
Property Owner is not available for Database ‘[DatabaseName]‘. This property may not exist for this object, or may not be retrievable due to insufficient access rights. (Microsoft.SqlServer.Smo)
This error is generated when the database owner’s login does not exist in the active directory and I had blogged about it here.
When I executed sp_helpdb, the output looked like the one below.
As evident from the output, the database owner’s login was not present in the Active Directory and it was reported as ~~unknown~~. Now that we know the problem, the resolution is pretty simple. Just executed sp_changedbowner or ALTER AUTHORIZATION command against the databases in question. The job started running successfully.
The next time you create a database please take care to change the database owner to a different login. Else you leave the organization and someone else needs to cleanup your name from all the databases that you had created!