Eu sempre pensei que o usuário dbo
era o proprietário real do banco de dados.
Isso é (ou pelo menos deveria estar) correto. O nome "dbo" desse Usuário nunca muda, mas o SID subjacente depende de quem criou o banco de dados ou de quem foi definido como sp_changedbowner (embora, inclusive, SQL Server 2005) ou ALTER AUTHORIZATION (começando com SQL Server 2008).
Nos três casos, o registro sys.databases
também é alterado para que sejam mantidos sincronizados. No entanto, ao restaurar um banco de dados, de outro sistema ou da mesma instância, mas de um banco de dados que foi copiado / desanexado antes de um desses 2 comandos SQL serem executados para alterar o proprietário, depois de RESTORE ou anexar, haverá ser uma incompatibilidade entre a owner_sid
coluna sys.databases
eo "dbo" sid
em sys.database_principals
em que a DB.
Tanto quanto sei, o registro em sys.database_principals
cada banco de dados é o proprietário real e a owner_sid
coluna sys.databases
é uma questão de manutenção / conveniência de registros (semelhante à desnormalização; sem sys.databases
o sistema, seria necessário fazer consultas separadas em todos os bancos de dados para obtenha essas informações, sempre que solicitado!) e segurança. Uma coisa é usada para identificar um banco de dados restaurado / anexado potencialmente perigoso / inválido, pois esses registros não correspondem. Tentativa de acessar assemblies SQLCLR marcados como carregados EXTERNAL_ACCESS
ou UNSAFE
não, se alguém optar por seguir a rota menos segura de habilitação, TRUSTWORTHY
pois depende do SID "dbo", pois precisa corresponder a um logon que possua o EXTERNAL ACCESS ASSEMBLY
ouUNSAFE ASSEMBLY
permissão. E quando há uma incompatibilidade no SID entre essas duas visualizações de catálogo do sistema, não é possível determinar qual usar e como sinalizador vermelho, pois existe um possível problema de segurança. Na verdade, testei essa condição no script de instalação do SQL # para alertar alguém para fazer a alteração apropriada, apenas para que eles não precisem perder tempo procurando por ela, caso o SQL Server se queixe em algum momento.