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_AUTHORIZATION
e sp_changedbowner
posso alterar a propriedade do objeto de banco de dados. A diferença entre os comandos, claro, é que ALTER_AUTHORIZATION
podem alterar outras coisas (como a propriedade das tabelas), enquanto sp_changedbowner
servem apenas para alterar o proprietário do banco de dados.
O comportamento que você indicou parece muito estranho. Você pode replicá-lo?