Principais considerações de segurança do SQLXML
Aplica-se a: SQL Server Banco de Dados SQL do Azure
A seguir, encontram-se diretrizes de segurança para o uso do SQLXML para acessar dados.
O provedor SQLXMLOLEDB expõe uma propriedade StreamFlags que permite definir sinalizadores indicando qual funcionalidade SQLXML deve ser habilitada ou desabilitada para cada instância específica. Você pode usar essa propriedade para personalizar o uso do SQLXML e ter certeza de que apenas os que você deseja estão habilitados. Para obter mais informações, consulte Provedor SQLXMLOLEDB (SQLXML 4.0).
Quando erros de SQLXML ocorrem e são retornados, eles podem conter informações sobre o esquema de banco de dados, como nomes de tabela, nomes de colunas ou informações sobre tipo. Você deve ter cuidado ao lidar com esses erros para que as informações sobre a instalação do SQL Server não sejam facilmente descobertas pelos usuários onde não são pretendidas ou necessárias.
Quando usado para consultar ou enviar atualizações para o SQL Server, o SQLXML não define nenhum limite para a quantidade de dados que podem ser trocados e não faz nenhuma verificação sobre o tamanho dos dados em uma carga SQLXML antes de tentar processá-la. Quando você desenvolve seu aplicativo usando SQLXML, é sua responsabilidade assegurar que haja memória suficiente no sistema para processar os dados. Por exemplo, ao consultar dados do servidor, você deve verificar se há espaço suficiente na memória do cliente para armazená-los. Da mesma forma, se você está carregando dados para o servidor, deve verificar se há memória disponível para processá-los e se há espaço disponível em disco no servidor para armazenar os dados.
O SQLXML gera dinamicamente consultas Transact-SQL e comandos de atualização e os envia ao SQL Server para execução. Esse é o único modo no qual o SQLXML consulta e atualiza o servidor. Os resultados serão recebidos como um fluxo (de XML) ou como um conjunto de linhas.
Ao receber resultados de consulta, o SQLXML não executa nenhuma ação com base no conteúdo dos dados que recebe. Nenhum processamento adicional é feito baseado no tipo ou no conteúdo dos dados. Os dados nunca são tratados como código com o qual as ações serão executadas.
Ao executar modelos XML, o SQLXML converte as consultas XPath e DBObject contidas no modelo enviado em comandos Transact-SQL que são executados no SQL Server. Esses comandos só afetam os dados existentes. Os comandos gerados pelo SQLXML nunca alterarão a estrutura do banco de dados. Os usuários devem executar comandos explícitos para alterar a estrutura do banco de dados. Por exemplo, incluindo-os em um bloco sql:query de um modelo.
Ao executar consultas DBObject e instruções XPath em arquivos de mapeamento, o SQLXML não alterará os dados no banco de dados.
O SQLXML pode fazer alterações de formatação nos dados fornecidos com base nas diferenças entre os modelos de dados XML e SQL Server. Por exemplo, o formato para especificar hora é diferente. O SQLXML tentará resolver essas diferenças. Como resultado, algumas informações de precisão podem ser perdidas.
O SQLXML não define limites para o tempo que leva para processar os dados. O processamento continuará até que um erro ocorra ou o processamento seja concluído.
O SQLXML não grava no sistema de arquivos. Se os usuários quiserem salvar os dados que recuperam do banco de dados, deverão usar seus códigos.
O SQLXML permite que os usuários executem qualquer consulta SQL que queiram no banco de dados. Essa funcionalidade nunca deve ser exposta para uma fonte não segura ou não controlada, já que ela está abrindo o banco de dados SQL para qualquer usuário.
Ao executar Updategrams, o SQLXML converte os blocos updg:sync em comandos DELETE, UPDATE e INSERT na instância do SQL Server. Esses comandos só afetam os dados existentes. Os comandos gerados pelo SQLXML nunca alterarão o banco de dados. Os usuários devem executar comandos explícitos para alterar a estrutura do banco de dados. Por exemplo, incluindo-os em um bloco sql:query de um modelo.
Ao executar DiffGrams, o SQLXML converte o DiffGram em comandos DELETE, UPDATE e INSERT na instância do SQL Server. Esses comandos só afetam os dados existentes. Os comandos gerados pelo SQLXML nunca alterarão o banco de dados. Os usuários devem executar comandos explícitos para alterar a estrutura do banco de dados. Por exemplo, incluindo-os em um bloco sql:query de um modelo.