Cenários de segurança do aplicativo no SQL ServerApplication Security Scenarios in SQL Server

Não há nenhuma maneira correta de criar um aplicativo cliente seguro do SQL Server.There is no single correct way to create a secure SQL Server client application. Cada aplicativo é único em seus requisitos, ambiente de implantação e população de usuários.Every application is unique in its requirements, deployment environment, and user population. Um aplicativo razoavelmente seguro, após ser inicialmente implantado, pode se tornar menos seguro ao longo do tempo.An application that is reasonably secure when it is initially deployed can become less secure over time. É impossível prever com alguma precisão quais as ameaças que podem surgir no futuro.It is impossible to predict with any accuracy what threats may emerge in the future.

O SQL Server, como um produto, evoluiu durante várias versões para incorporar os recursos de segurança mais recentes que permitem aos desenvolvedores criar aplicativos de banco de dados seguros.SQL Server, as a product, has evolved over many versions to incorporate the latest security features that enable developers to create secure database applications. No entanto, a segurança não vem pronta na caixa; ela requer monitoramento e atualização contínuos.However, security doesn't come in the box; it requires continual monitoring and updating.

Ameaças comunsCommon Threats

Os desenvolvedores precisam entender as ameaças de segurança, as ferramentas fornecidas para combatê-las e como evitar falhas de segurança autoprovocadas.Developers need to understand security threats, the tools provided to counter them, and how to avoid self-inflicted security holes. A segurança pode ser considerada como uma cadeia, em que o rompimento de qualquer um dos elos compromete a força do todo.Security can best be thought of as a chain, where a break in any one link compromises the strength of the whole. A lista a seguir inclui algumas ameaças comuns de segurança que são discutidas mais detalhadamente nos tópicos desta seção.The following list includes some common security threats that are discussed in more detail in the topics in this section.

Injeção de SQLSQL Injection

A injeção de SQL é o processo pelo qual um usuário mal-intencionado insere instruções Transact-SQL em vez de uma entrada válida.SQL Injection is the process by which a malicious user enters Transact-SQL statements instead of valid input. Se a entrada for passada diretamente para o servidor sem ser validada e se o aplicativo executar inadvertidamente o código injetado, o ataque terá o potencial de danificar ou destruir dados.If the input is passed directly to the server without being validated and if the application inadvertently executes the injected code, then the attack has the potential to damage or destroy data. Você pode impedir ataques de injeção do SQL Server usando procedimentos armazenados e comandos parametrizados, evitando o SQL dinâmico e restringindo as permissões de todos os usuários.You can thwart SQL Server injection attacks by using stored procedures and parameterized commands, avoiding dynamic SQL, and restricting permissions on all users.

Elevação de privilégioElevation of Privilege

Os ataques de elevação de privilégio ocorrem quando um usuário é capaz de assumir os privilégios de uma conta confiável, como um proprietário ou administrador.Elevation of privilege attacks occur when a user is able to assume the privileges of a trusted account, such as an owner or administrator. Sempre execute em contas de usuário com o mínimo de privilégios e atribua apenas as permissões necessárias.Always run under least-privileged user accounts and assign only needed permissions. Evite usar contas administrativas ou de proprietário para executar o código.Avoid using administrative or owner accounts for executing code. Isso limitará a quantidade de danos que podem ocorrer se um ataque for realizado com sucesso.This limits the amount of damage that can occur if an attack succeeds. Ao executar tarefas que exigem permissões adicionais, use a assinatura ou representação de procedimento somente pela duração da tarefa.When performing tasks that require additional permissions, use procedure signing or impersonation only for the duration of the task. Você pode assinar procedimentos armazenados com certificados ou usar a representação para atribuir permissões temporariamente.You can sign stored procedures with certificates or use impersonation to temporarily assign permissions.

Investigação e observação inteligenteProbing and Intelligent Observation

Um ataque de sondagem pode usar mensagens de erro geradas por um aplicativo para pesquisar vulnerabilidades de segurança.A probing attack can use error messages generated by an application to search for security vulnerabilities. Implemente o tratamento de erro em todo o código de procedimento para impedir que as informações de erro do SQL Server sejam retornadas ao usuário final.Implement error handling in all procedural code to prevent SQL Server error information from being returned to the end user.

AutenticaçãoAuthentication

Um ataque de injeção de cadeia de conexão pode ocorrer ao usar logons do SQL Server se uma cadeia de conexão baseada na entrada do usuário for construída em tempo de execução.A connection string injection attack can occur when using SQL Server logins if a connection string based on user input is constructed at run time. Se a cadeia de conexão não for verificada em busca de pares de palavras-chave válidos, um invasor poderá inserir caracteres extras, potencialmente acessando dados confidenciais ou outros recursos no servidor.If the connection string is not checked for valid keyword pairs, an attacker can insert extra characters, potentially accessing sensitive data or other resources on the server. Use a autenticação do Windows sempre que possível.Use Windows authentication wherever possible. Se você precisar usar logons do SQL Server, use o SqlConnectionStringBuilder para criar e validar cadeias de conexão em tempo de execução.If you must use SQL Server logins, use the SqlConnectionStringBuilder to create and validate connection strings at run time.

SenhasPasswords

Muitos ataques são bem-sucedidos porque um invasor conseguiu obter ou adivinhar uma senha de um usuário privilegiado.Many attacks succeed because an intruder was able to obtain or guess a password for a privileged user. As senhas são sua primeira linha de defesa contra intrusos; portanto, a configuração de senhas fortes é essencial para a segurança do seu sistema.Passwords are your first line of defense against intruders, so setting strong passwords is essential to the security of your system. Criar e impor políticas de senha para autenticação de modo misto.Create and enforce password policies for mixed mode authentication.

Sempre atribua uma senha forte à conta de sa, mesmo ao usar a Autenticação do Windows.Always assign a strong password to the sa account, even when using Windows Authentication.

Nesta seçãoIn This Section

Gerenciando permissões com procedimentos armazenados no SQL ServerManaging Permissions with Stored Procedures in SQL Server
Descreve como usar procedimentos armazenados para gerenciar permissões e controlar o acesso a dados.Describes how to use stored procedures to manage permissions and control data access. O uso de procedimentos armazenados é uma maneira eficaz de responder a muitas ameaças de segurança.Using stored procedures is an effective way to respond to many security threats.

Gravação de SQL Dinâmico Seguro no SQL ServerWriting Secure Dynamic SQL in SQL Server
Descreve técnicas para gravar SQL dinâmico seguro usando procedimentos armazenados.Describes techniques for writing secure dynamic SQL using stored procedures.

Assinando procedimentos armazenados no SQL ServerSigning Stored Procedures in SQL Server
Descreve como assinar um procedimento armazenado com um certificado para permitir que os usuários trabalhem com dados aos quais eles não têm acesso direto.Describes how to sign a stored procedure with a certificate to enable users to work with data they do not have direct access to. Isso permite que os procedimentos armazenados executem operações que o chamador não tem permissões para executar diretamente.This enables stored procedures to perform operations that the caller does not have permissions to perform directly.

Personalizando permissões com representação no SQL ServerCustomizing Permissions with Impersonation in SQL Server
Descreve como usar a cláusula EXECUTE AS para representar outro usuário.Describes how to use the EXECUTE AS clause to impersonate another user. A representação alterna o contexto de execução do chamador para o usuário especificado.Impersonation switches the execution context from the caller to the specified user.

Conceder permissões de nível de linha no SQL ServerGranting Row-Level Permissions in SQL Server
Descreve como implementar permissões em nível de linha para restringir o acesso a dados.Describes how to implement row-level permissions to restrict data access.

Criando funções de aplicativo no SQL ServerCreating Application Roles in SQL Server
Descreve os recursos e a funcionalidade das funções de aplicativo.Describes features and functionality of application roles.

Habilitando o acesso entre bancos de dados no SQL ServerEnabling Cross-Database Access in SQL Server
Descreve como habilitar o acesso entre bancos de dados sem comprometer a segurança.Describes how to enable cross-database access without jeopardizing security.

Consulte tambémSee also