ALTER ASSEMBLY (Transact-SQL)
Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure
Altera um assembly pela modificação das propriedades do catálogo do SQL Server de um assembly. ALTER ASSEMBLY
o atualiza para a cópia mais recente dos módulos do .NET Framework que contêm sua implementação e adiciona ou remove arquivos associados a ele. Os assemblies são criados usando CREATE ASSEMBLY.
Convenções de sintaxe de Transact-SQL
Sintaxe
ALTER ASSEMBLY assembly_name
[ FROM <client_assembly_specifier> | <assembly_bits> ]
[ WITH <assembly_option> [ , ...n ] ]
[ DROP FILE { file_name [ , ...n ] | ALL } ]
[ ADD FILE FROM
{
client_file_specifier [ AS file_name ]
| file_bits AS file_name
} [ , ...n ]
] [ ; ]
<client_assembly_specifier> ::=
'\\computer_name\share-name\ [ path\ ] manifest_file_name '
| '[ local_path\ ] manifest_file_name'
<assembly_bits> ::=
{ varbinary_literal | varbinary_expression }
<assembly_option> ::=
PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE }
| VISIBILITY = { ON | OFF }
| UNCHECKED DATA
Argumentos
assembly_name
O nome do assembly que você deseja modificar. assembly_name já precisa existir no banco de dados.
FROM <client_assembly_specifier> | <assembly_bits>
Atualiza um assembly à cópia mais recente dos módulos do .NET Framework que contêm a implementação desse assembly. Esta opção pode ser usada somente se não houver nenhum arquivo associado ao assembly especificado.
<client_assembly_specifier>
especifica a localização, na rede ou no local, onde fica o assembly que está sendo atualizado. O local de rede inclui o nome do computador, o nome do compartilhamento e um caminho dentro desse compartilhamento. manifest_file_name especifica o nome do arquivo que contém o manifesto do assembly.
Importante
O Banco de Dados SQL do Azure não dá suporte à referência a um arquivo.
<assembly_bits>
é o valor binário do assembly.
Instruções separadas ALTER ASSEMBLY
devem ser emitidas para todos os assemblies dependentes que também exigem atualização.
PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE }
Especifica a propriedade do conjunto de permissões de acesso ao código do .NET Framework do assembly. Para obter mais informações sobre essa propriedade, consulte CREATE ASSEMBLY.
A PERMISSION_SET
opção é afetada pela opção de segurança clr strict. Quando clr strict security
está habilitada, todos os assemblies são tratados como UNSAFE
.
As EXTERNAL_ACCESS
opções e UNSAFE
não estão disponíveis em um banco de dados independente.
VISIBILITY = { ON | OFF }
Indica se o assembly está visível para a criação de funções CLR (Common Language Runtime), procedimentos armazenados, disparadores, tipos de dados definidos pelo usuário e funções de agregação definidas pelo usuário em relação a ele. Se definido como OFF
, o assembly deve ser chamado somente por outros assemblies. Se houver objetos de banco de dados CLR existentes já criados no assembly, a visibilidade do assembly não poderá ser alterada. Todos os assemblies referenciados por assembly_name são carregados como não visíveis por padrão.
UNCHECKED DATA
Por padrão, ALTER ASSEMBLY
falha se precisar verificar a consistência de linhas de tabela individuais. Esta opção permite adiar as verificações para um momento posterior usando DBCC CHECKTABLE
. Se especificado, o SQL Server executará a ALTER ASSEMBLY
instrução mesmo se houver tabelas no banco de dados que contenham as seguintes condições:
Colunas computadas persistentes que referenciem métodos no assembly, direta ou indiretamente, por meio de funções ou métodos Transact-SQL.
CHECK
restrições que direta ou indiretamente fazem referência a métodos no assembly.Colunas de um tipo CLR definido pelo usuário que dependem do assembly e o tipo implementa um
UserDefined
formato de (nãoNative
) serialização.Colunas de um tipo CLR definido pelo usuário que fazem referência a exibições criadas usando
WITH SCHEMABINDING
o .
Se houver restrições CHECK
, elas serão desabilitadas e marcadas como não confiáveis. Quaisquer tabelas que contenham colunas dependentes do assembly serão marcadas como contendo dados não verificados até que essas tabelas sejam verificadas explicitamente.
Somente membros das funções de banco de dados fixas db_owner e db_ddlowner podem especificar essa opção.
Requer a ALTER ANY SCHEMA
permissão para especificar essa opção.
Para obter mais informações, consulte Implementando assemblies.
SOLTAR ARQUIVO { file_name [ ,... n ] | TODOS }
Remove do banco de dados o nome de arquivo associado ao assembly ou todos os arquivos associados ao assembly. Se usado com ADD FILE
o seguinte, DROP FILE
executa primeiro. Isso permite que você substitua um arquivo pelo mesmo nome de arquivo.
Observação
Essa opção não está disponível em um banco de dados independente ou no Banco de Dados SQL do Azure.
ADICIONAR ARQUIVO DE { client_file_specifier [ AS file_name ] | file_bits COMO file_name }
Carrega um arquivo a ser associado ao assembly, como código-fonte, arquivos de depuração ou outras informações relacionadas, no servidor e fica visível na exibição do sys.assembly_files
catálogo. client_file_specifier especifica o local do qual o arquivo deve ser carregado. Nesse caso, file_bits pode ser usado para especificar a lista de valores binários que compõem o arquivo. file_name especifica o nome sob o qual o arquivo deve ser armazenado na instância do SQL Server. file_name precisará ser especificado se file_bits for especificado e será opcional se client_file_specifier for especificado. Se file_name não for especificado, a parte file_name do client_file_specifier será usada como file_name.
Observação
Essa opção não está disponível em um banco de dados independente ou no Banco de Dados SQL do Azure.
A segurança de acesso ao código não é mais suportada
O CLR usa o CAS (Segurança de Acesso do Código) no .NET Framework, para o qual não há mais suporte como um limite de segurança. Um assembly CLR criado com o PERMISSION_SET = SAFE
pode conseguir acessar recursos externos do sistema, chamar um código não gerenciado e adquirir privilégios sysadmin. No SQL Server 2017 (14.x) e versões posteriores, a opção a opção de sp_configure
, clr strict security aprimora a segurança dos assemblies CLR. A clr strict security
está habilitada por padrão e trata assemblies SAFE
e EXTERNAL_ACCESS
como se eles fossem marcados como UNSAFE
. A opção clr strict security
pode ser desabilitada para compatibilidade com versões anteriores, mas não é recomendado.
Recomendamos que você assine todos os assemblies por um certificado ou uma chave assimétrica com um logon correspondente que tenha recebido a permissão UNSAFE ASSEMBLY
no banco de dados master
. Os administradores do SQL Server também podem adicionar assemblies a uma lista de assemblies, na qual o Mecanismo de Banco de Dados deve confiar. Para obter mais informações, consulte sys.sp_add_trusted_assembly.
Comentários
ALTER ASSEMBLY
não interrompe as sessões em execução no momento que estão executando código no assembly que está sendo modificado. As sessões atuais concluem a execução usando os bits inalterados do assembly.
Se a FROM
cláusula for especificada, ALTER ASSEMBLY
atualiza o assembly em relação às cópias mais recentes dos módulos fornecidos. Como pode haver funções CLR, procedimentos armazenados, gatilhos, tipos de dados e funções agregadas definidas pelo usuário na instância do SQL Server que já estão definidas no assembly, a ALTER ASSEMBLY
instrução os reassocia à implementação mais recente do assembly. Para realizar essa nova associação, os métodos mapeados para funções CLR, procedimentos armazenados e disparadores ainda deverão existir no assembly modificado com as mesmas assinaturas. As classes que implementam tipos CLR definidos pelo usuário e funções de agregação definidas pelo usuário ainda deverão satisfazer os requisitos para serem uma agregação ou tipo definido pelo usuário.
Cuidado
Se WITH UNCHECKED DATA
não for especificado, o SQL Server tentará impedir ALTER ASSEMBLY
a execução se a nova versão do assembly afetar os dados existentes em tabelas, índices ou outros sites persistentes. No entanto, o SQL Server não garante que colunas, índices, exibições indexadas ou expressões computadas sejam consistentes com as rotinas e os tipos subjacentes quando o assembly CLR for atualizado. Tenha cuidado ao executar ALTER ASSEMBLY
para garantir que não haja uma incompatibilidade entre o resultado de uma expressão e um valor baseado nessa expressão armazenada no assembly.
ALTER ASSEMBLY
Altera a versão do assembly. A cultura e o token de chave pública do assembly permanecem os mesmos.
A ALTER ASSEMBLY
instrução não pode ser usada para alterar os seguintes itens:
As assinaturas de funções CLR, funções de agregação, procedimentos armazenados e disparadores em uma instância do SQL Server que façam referência ao assembly. ALTER ASSEMBLY falha quando o SQL Server não pode reassociar objetos de banco de dados do .NET Framework no SQL Server com a nova versão do assembly.
As assinaturas de métodos no assembly que são chamados a partir de outros assemblies.
A lista de assemblies que dependem do assembly, conforme referenciado
DependentList
na propriedade do assembly.A capacidade de indexação de um método, a menos que não existam índices ou colunas computadas persistidas que dependam desse método, seja direta ou indiretamente.
O
FillRow
atributo de nome do método para funções com valor de tabela CLR.A
Accumulate
assinatura do método andTerminate
para agregações definidas pelo usuário.Assemblies do sistema.
Propriedade do assembly. Em vez disso, use ALTER AUTHORIZATION .
Além disso, para assemblies que implementam tipos definidos pelo usuário, ALTER ASSEMBLY
podem ser usados para fazer apenas as seguintes alterações:
Modificar métodos públicos da classe de tipo definida pelo usuário, desde que assinaturas ou atributos não sejam alterados.
Adicionar novos métodos públicos.
Modificar métodos privados de alguma forma.
Os campos contidos em um tipo definido pelo usuário serializado nativo, incluindo membros de dados ou classes base, não podem ser alterados usando ALTER ASSEMBLY
. Não é oferecido suporte a todas as demais alterações.
Se ADD FILE FROM
não for especificado, ALTER ASSEMBLY
descartará todos os arquivos associados ao assembly.
Se ALTER ASSEMBLY
for executado sem a UNCHECKED
cláusula data, serão executadas verificações para verificar se a nova versão do assembly não afeta os dados existentes nas tabelas. Dependendo da quantidade de dados que precisa ser verificada, essa etapa pode afetar o desempenho.
Permissões
Requer ALTER
permissão no assembly. Os requisitos adicionais são os seguintes:
Para alterar um assembly cujo conjunto de permissões existente é
EXTERNAL_ACCESS
, é necessáriaEXTERNAL ACCESS ASSEMBLY
permissão no servidor.Para alterar um assembly cujo conjunto de permissões existente é
UNSAFE
necessárioUNSAFE ASSEMBLY
permissão no servidor.Para alterar o conjunto de permissões de um assembly para
EXTERNAL_ACCESS
, é necessáriaEXTERNAL ACCESS ASSEMBLY
permissão no servidor.Para alterar o conjunto de permissões de um assembly para
UNSAFE
, é necessáriaUNSAFE ASSEMBLY
permissão no servidor.A especificação
WITH UNCHECKED DATA
requerALTER ANY SCHEMA
permissão.
Permissões com a segurança estrita do CLR
As seguintes permissões são necessárias para alterar um assembly CLR quando clr strict security
está habilitado:
O usuário deve ter a permissão
ALTER ASSEMBLY
Além disso, uma das seguintes condições também deve ser verdadeira:
O assembly é assinado com um certificado ou uma chave assimétrica que tem um logon correspondente à permissão
UNSAFE ASSEMBLY
no servidor. A assinatura do assembly é recomendada.O banco de dados tem a propriedade
TRUSTWORTHY
definida comoON
e o banco de dados pertence a um logon que tem a permissãoUNSAFE ASSEMBLY
no servidor. Essa opção não é recomendada.
Para obter mais informações sobre conjuntos de permissões de assembly, consulte Projetando assemblies.
Exemplos
R. Atualizar um assembly
O exemplo a seguir atualiza o assembly ComplexNumber
para a cópia mais recente dos módulos do .NET Framework que contêm a implementação do assembly em questão.
Observação
O assembly ComplexNumber
pode ser criado executando os UserDefinedDataType
scripts de exemplo. Para obter mais informações, confira Tipo definido pelo usuário.
ALTER ASSEMBLY ComplexNumber
FROM 'C:\Program Files\Microsoft SQL Server\130\Tools\Samples\1033\Engine\Programmability\CLR\UserDefinedDataType\CS\ComplexNumber\obj\Debug\ComplexNumber.dll'
Importante
O Banco de Dados SQL do Azure não dá suporte à referência a um arquivo.
B. Adicionar um arquivo para associar a um assembly
O exemplo a seguir carrega o arquivo de código fonte Class1.cs
a ser associado ao assembly MyClass
. Este exemplo assume que o assembly MyClass
já foi criado no banco de dados.
ALTER ASSEMBLY MyClass
ADD FILE FROM 'C:\MyClassProject\Class1.cs';
Importante
O Banco de Dados SQL do Azure não dá suporte à referência a um arquivo.
C. Alterar as permissões de um assembly
O exemplo a seguir altera o conjunto de permissões do assembly ComplexNumber
de SAFE para EXTERNAL ACCESS
.
ALTER ASSEMBLY ComplexNumber WITH PERMISSION_SET = EXTERNAL_ACCESS;