AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 301845
Accepted
user1664043
user1664043
Asked: 2021-10-29 12:22:40 +0800 CST2021-10-29 12:22:40 +0800 CST 2021-10-29 12:22:40 +0800 CST

Sql Server 2019, migrando assemblies clr, segurança estrita clr

  • 772

Temos alguns códigos antigos em execução nos servidores Sql Server 2008 e estamos procurando atualizar para o Sql Server 2019. O código clr antigo é muito antigo (como .net framework 2.0 antigo), então eu sabia que teria que reconstruir o assemblies para o novo servidor. Fizemos um backup/restauração dos sistemas antigos para o novo sistema e, embora todos os assemblies estivessem lá, eles geraram erros na execução.

Eu encontrei as postagens "CLR strict security" e "CREATE ou ALTER ASSEMBLY para assembly XXX com a opção SAFE ou EXTERNAL_ACCESS falhou porque a opção 'clr strict security' de sp_configure está definida como 1. A Microsoft recomenda que você assine o assembly com um certificado..." mensagem.

Comecei na primeira montagem no primeiro db. Mudei o framework para 4.6.1 e assinei. Eu tentei ALTER ASSEMBLY pela primeira vez e ele disse que não poderia ALTER por causa da diferença de assinatura. Então eu eliminei todas as referências a esse assembly, então eliminei o assembly e fiz um CREATE ASSEMBLY com o novo código. E funcionou. Talvez não devesse, mas aconteceu.

Então eu comecei a trabalhar na próxima montagem no próximo banco de dados. Fez o mesmo processo (atualizar framework, assiná-lo, reconstruir, descartar todas as referências, descartar assembly, criar assembly). Somente na próxima vez que recebo "CREATE ou ALTER ASSEMBLY para assembly XXX com a opção SAFE ou EXTERNAL_ACCESS falhou porque a opção 'clr strict security' de sp_configure está definida como 1. A Microsoft recomenda que você assine o assembly com um certificado ..." mensagem.

eu corri

sp_configure

SELECT * FROM sys.trusted_assemblies
SELECT * FROM sys.assemblies

em ambos os bancos de dados. Ambos mostram "clr strict security" run_value como 1, ambos não mostram entradas em trusted_assemblies.

Estou percebendo que meu entendimento "apenas assine a montagem" não foi suficiente, mas estou intrigado por que a metodologia funcionou no primeiro banco de dados e falhou no segundo banco de dados.

Eu gerei os arquivos snk frescos para cada assembly e não associei nenhum login a eles.

Como "basta assinar a assembléia" conseguiu funcionar na primeira tentativa e não na segunda?

No primeiro banco de dados, na saída de sys.assemblies, vejo o token de chave pública da nova compilação no assembly e vejo SAFE_ACCESS no permission_set_desc e nas novas datas de instalação, mas não consigo descobrir por que isso foi suficiente em o primeiro db e não no segundo.

Obrigado

sql-server-2019 sql-clr
  • 1 1 respostas
  • 1457 Views

1 respostas

  • Voted
  1. Best Answer
    Solomon Rutzky
    2021-10-29T12:39:34+08:002021-10-29T12:39:34+08:00

    Primeiro, não há/há necessidade de recompilar os assemblies. Não importa que eles estivessem vinculados ao CLR 2.0. O SQL Server 2012 e mais recente (pelo menos até 2019) está vinculado apenas ao CLR 4.0 e, portanto, usará o nível mais alto do .NET Framework instalado nesse servidor na série 4.x. Isso funciona devido à compatibilidade com versões anteriores nas APIs do Framework.

    Segundo, isso é realmente muito fácil de corrigir simplesmente assinando os assemblies no local. Dito de forma simples:

    1. crie um certificado no banco de dados com o assembly
    2. assinar a assembleia
    3. crie um certificado a [master]partir da chave pública de certificados do banco de dados atual
    4. crie um login a partir desse certificado
    5. conceder ao login a UNSAFE ASSEMBLYpermissão

    Nada externo ao SQL Server é necessário. Eu tenho um exemplo disso na minha resposta para a seguinte pergunta (aqui no DBA.SE):

    Mensagem de erro 10314, nível 16, estado 11 com assembly SAFE após a atualização para o SQL Server 2017

    E no seguinte post:

    SQLCLR vs. SQL Server 2017, Parte 4: “Assemblies confiáveis” – A decepção (Mensagem 10314)

    Terceiro, não estou inteiramente certo por que suas ações funcionaram no primeiro caso, mas não no segundo, pois não deveria ter funcionado no primeiro caso. Se você não criou uma chave assimétrica [master]do assembly (ou o arquivo .snk usado para assinar/nomear fortemente esse assembly), a única maneira de carregar o assembly com êxito seria habilitar a TRUSTWORTHYpropriedade do banco de dados. É possível que você tenha feito isso em algum momento entre obter o erro original (o que não aconteceria se TRUSTWORTHYestivesse ativado) e sua tentativa final de CREATE ASSEMBLY?

    • 4

relate perguntas

  • SQL CLR no MySQL? [fechado]

  • Assembly de referência em sqlproj não sendo implantado no servidor

  • Obtendo o Visual Studio para implantar um UDF para retornar NVARCHAR(MAX)

  • Existe alguma maneira de fazer o sql server pesquisar o banco de dados mestre para procedimentos armazenados SQLCLR antes do atual?

  • Além de reiniciar o SQL Server, existe alguma maneira de forçar o SQLCLR AppDomain a ser redefinido?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve