Alteração de proprietário do banco de dados no SQL Server 2008; Problemas de CLR dependendo do método usado?

Alteração de proprietário do banco de dados no SQL Server 2008; Problemas de CLR dependendo do método usado?

Anexei um banco de dados e tentei alterar o proprietário para um login válido.

Usei a instrução: ALTER AUTHORIZATION ON database::my_db_name TO "sa". As propriedades do banco de dados mostraram que o novo proprietário era 'sa', porém eu ainda estava recebendo erros de permissão para assemblies CLR irrestritos (0x80FC80F1, 0x8013150A), algo sobre problemas de confiança de assembly.

Resolvi o problema usando a instrução: EXEC sp_changedbowner 'sa'; para alterar o proprietário do banco de dados.

Minha pergunta é: qual é a diferença entre esses dois métodos de alteração do proprietário do banco de dados. Eles são equivalentes? Parece claro para mim que sp_changedbowner está fazendo algo mais/correto que a instrução de alteração de autorização não está fazendo.


Caso você esteja interessado... antes de consertar as coisas com sp_changedbowner, tentei:

  • definir a propriedade confiável do banco de dados como ON; na verdade, fiz isso algumas vezes; Eu sei que é um requisito executar assemblies CLR personalizados irrestritos e não assinados
  • alterando o proprietário de cada assembly CLR para dbo, já que o proprietário estava em branco, mas aparentemente dbo já era o proprietário e está sempre em branco no SSMS.
  • alterar o proprietário de cada assembly CLR para outra coisa, mas isso não funciona, porque os assemblies com assemblies dependentes parecem sempre precisar do mesmo proprietário; mas é impossível alterar o proprietário simultaneamente em ambos com a interface fornecida.
  • chamando GRANT UNSAFE ASSEMBLY para [sa]; aparentemente você não pode conceder permissões a essa conta interna, junto com algumas outras; eles já têm permissão
  • chamando GRANT UNSAFE ASSEMBLY para [NT AUTHORITY\NETWORK SERVICE] (os métodos de chamada de conta nos assemblies); sem erros, mas não pareceu conseguir nada (talvez tenha alterado o número do erro? A mensagem nunca mudou).
  • ...e provavelmente algumas outras coisas que não consigo lembrar.

Responder1

Na sua lista não vejo a configuração do banco de dados como confiável, então presumo que você esqueceu esta etapa:

ALTER DATABASE my_db_name SET TRUSTWORTHY ON;

Mas talvez não...

Verificando com este artigo:http://support.microsoft.com/kb/918040parece que eles realmente sugerem o uso de sp_changedbowner em vez de ALTER AUTHORIZATION. Mas o fato é que ele faz exatamente a mesma coisa (sp_changedbowner chama ALTER AUTHORIZATION nos bastidores). A diferença é que ele também remove "aliases" para o usuário dbo (funcionalidade obsoleta de qualquer maneira) e força um ponto de verificação do banco de dados. Essa última peça pode ser a que você está procurando.

Responder2

Acredito ALTER_AUTHORIZATIONe sp_changedbownerposso alterar a propriedade do objeto de banco de dados. A diferença entre os comandos, claro, é que ALTER_AUTHORIZATIONpodem alterar outras coisas (como a propriedade das tabelas), enquanto sp_changedbownerservem apenas para alterar o proprietário do banco de dados.

O comportamento que você indicou parece muito estranho. Você pode replicá-lo?

informação relacionada