Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este artigo discute como pode criar uma ligação a uma base de dados SQL Server.
Propriedades de Ligação
Consulte DSN e Connection String Keywords and Attributes para todas as palavras-chave e atributos da cadeia de ligação suportados no Linux e macOS.
Importante
Ao ligar-se a uma base de dados que utiliza espelhamento de base de dados (tem um parceiro de failover), não especifique o nome da base de dados na cadeia de ligação. Em vez disso, envie um comando usardatabase_name para se ligar à base de dados antes de executar as suas consultas.
O valor passado para a palavra-chave Driver pode ser um dos seguintes:
O nome que usou quando instalou o driver.
O caminho para a biblioteca de controladores, que foi especificado no ficheiro .ini de modelo usado para instalar o controlador.
As DSNs são opcionais. Pode utilizar um DSN para definir palavras-chave da cadeia de ligação sob um DSN nome que depois poderá referenciar na cadeia de ligação. Para criar um DSN, crie (se necessário) e edite o ficheiro ~/.odbc.ini (.odbc.ini no seu diretório principal) para um DSN de Utilizador acessível apenas ao utilizador atual, ou /etc/odbc.ini para um DSN de Sistema (privilégios administrativos necessários). O seguinte odbc.ini é um exemplo que mostra as entradas mínimas exigidas para uma DSN:
# [DSN name]
[MSSQLTest]
Driver = ODBC Driver 18 for SQL Server
# Server = [protocol:]server[,port]
Server = tcp:localhost,1433
Encrypt = yes
#
# Note:
# Port isn't a valid keyword in the odbc.ini file
# for the Microsoft ODBC driver on Linux or macOS
#
Para ligar usando o DSN acima numa cadeia de ligação, especificaria a DSN palavra-chave como: DSN=MSSQLTest;UID=my_username;PWD=<password>
A cadeia de ligação acima seria equivalente a especificar uma cadeia de ligação sem a DSN palavra-chave como: Driver=ODBC Driver 18 for SQL Server;Server=tcp:localhost,1433;Encrypt=yes;UID=my_username;PWD=<password>
Pode, opcionalmente, especificar o protocolo e a porta para se ligar ao servidor. Por exemplo, Servidor=tcp:nome doservidor,12345. O único protocolo suportado pelos drivers Linux e macOS é tcp.
Para conectar a uma instância nomeada numa porta estática, use Server=servername,port_number. A ligação a uma porta dinâmica não é suportada antes da versão 17.4.
Alternativamente, pode adicionar a informação DSN a um ficheiro modelo e executar o seguinte comando para a adicionar a ~/.odbc.ini :
odbcinst -i -s -f <template_file>
Para documentação completa sobre ficheiros ini e odbcinst, consulte a documentação unixODBC. Para entradas no ficheiro odbc.ini específicas do Driver ODBC para SQL Server, veja DSN e Connection String Keywords and Attributes para os suportados em Linux e macOS.
Pode verificar se o seu driver está a funcionar usando isql para testar a ligação, ou pode usar este comando:
bcp master.INFORMATION_SCHEMA.TABLES out OutFile.dat -S <server> -U <name> -P <password>
Utilização de TLS/SSL
Pode usar o Transport Layer Security (TLS), anteriormente conhecido como Secure Sockets Layer (SSL), para encriptar ligações ao SQL Server. O TLS protege nomes de utilizador e palavras-passe do SQL Server na rede. O TLS também verifica a identidade do servidor para proteger contra ataques man-in-the-middle (MITM).
Ativar a encriptação aumenta a segurança à custa do desempenho.
Para mais informações, veja Encriptação de Ligações ao SQL Server e Utilização de Encriptação Sem Validação.
Independentemente das definições para Encrypt e TrustServerCertificate, as credenciais de login do servidor (nome de utilizador e palavra-passe) estão sempre encriptadas. As tabelas seguintes mostram o efeito das definições Encrypt e TrustServerCertificate .
ODBC Driver 18 e mais recente
| Criptografar configuração | Certificado de Servidor Confiável | Criptografia de força de servidor | Resultado |
|---|---|---|---|
| Não | Não | Não | O certificado do servidor não está verificado. Os dados enviados entre o cliente e o servidor não são criptografados. |
| Não | Yes | Não | O certificado do servidor não está verificado. Os dados enviados entre o cliente e o servidor não são criptografados. |
| Yes | Não | Não | O certificado do servidor está verificado. Os dados enviados entre o cliente e o servidor são criptografados. |
| Yes | Yes | Não | O certificado do servidor não está verificado. Os dados enviados entre o cliente e o servidor são criptografados. |
| Não | Não | Yes | O certificado do servidor está verificado. Os dados enviados entre o cliente e o servidor são criptografados. |
| Não | Yes | Yes | O certificado do servidor não está verificado. Os dados enviados entre o cliente e o servidor são criptografados. |
| Yes | Não | Yes | O certificado do servidor está verificado. Os dados enviados entre o cliente e o servidor são criptografados. |
| Yes | Yes | Yes | O certificado do servidor não está verificado. Os dados enviados entre o cliente e o servidor são criptografados. |
| Rigoroso | - | - | TrustServerCertificate é ignorado. O certificado do servidor está verificado. Os dados enviados entre o cliente e o servidor são criptografados. |
Observação
Strict só está disponível em servidores que suportam conexões TDS 8.0.
Driver ODBC 17 e mais antigo
| Criptografar configuração | Certificado de Servidor Confiável | Criptografia de força de servidor | Resultado |
|---|---|---|---|
| Não | Não | Não | O certificado do servidor não está verificado. Os dados enviados entre o cliente e o servidor não são criptografados. |
| Não | Yes | Não | O certificado do servidor não está verificado. Os dados enviados entre o cliente e o servidor não são criptografados. |
| Yes | Não | Não | O certificado do servidor está verificado. Os dados enviados entre o cliente e o servidor são criptografados. |
| Yes | Yes | Não | O certificado do servidor não está verificado. Os dados enviados entre o cliente e o servidor são criptografados. |
| Não | Não | Yes | O certificado do servidor não está verificado. Os dados enviados entre o cliente e o servidor são criptografados. |
| Não | Yes | Yes | O certificado do servidor não está verificado. Os dados enviados entre o cliente e o servidor são criptografados. |
| Yes | Não | Yes | O certificado do servidor está verificado. Os dados enviados entre o cliente e o servidor são criptografados. |
| Yes | Yes | Yes | O certificado do servidor não está verificado. Os dados enviados entre o cliente e o servidor são criptografados. |
Ao usar encriptação de ligação, o nome (ou endereço IP) num Nome Comum de Assunto (CN) ou Nome Alternativo de Assunto (SAN) num certificado TLS/SSL do SQL Server deve corresponder exatamente ao nome do servidor (ou endereço IP) especificado na cadeia de ligação. A HostnameInCertificate palavra-chave (v18.0+) pode ser usada para especificar um nome alternativo usado para corresponder aos nomes do certificado TLS/SSL. Quando a palavra-chave é especificada, o certificado TLS/SSL do SQL Server deve corresponder a um dos nomes do servidor, ou ao HostnameInCertificate.
Por defeito, as ligações encriptadas verificam sempre o certificado do servidor. No entanto, se se ligar a um servidor que tenha um certificado auto-assinado e não estiver a usar modo de encriptação rigorosa, pode adicionar a TrustServerCertificate opção para contornar a verificação do certificado na lista de autoridades certificadoras de confiança:
Driver={ODBC Driver 18 for SQL Server};Server=ServerNameHere;Encrypt=YES;TrustServerCertificate=YES
Em modo de encriptação estrita, o certificado é sempre verificado. Como opção para a validação padrão de certificados, a ServerCertificate palavra-chave (v18.1+) pode ser usada para especificar o caminho para um ficheiro de certificado a corresponder ao certificado do SQL Server. Esta opção só está disponível quando se utiliza encriptação rigorosa. Os formatos de certificados aceites são PEM, DER e CER. Se especificado, o certificado do SQL Server é verificado para verificar se o ServerCertificate fornecido é uma correspondência exata.
O TLS em Linux e macOS utiliza a biblioteca OpenSSL. A tabela seguinte mostra as versões mínimas suportadas do OpenSSL e as localizações padrão do Certificate Trust Store para cada plataforma:
| Platform | Versão Mínima do OpenSSL | Localização do Armazenamento de Confiança de Certificados Padrão |
|---|---|---|
| Debian 10, 11, 12 | 1.1.1 | /etc/ssl/certs |
| Debian 9 | 1.1.0 | /etc/ssl/certs |
| Debian 8.71 | 1.0.1 | /etc/ssl/certificações |
| OS X 10.11, macOS | 1.0.2 | /usr/local/etc/openssl/certs |
| Hat Enterprise Linux 9+ | 3.0.1 | /etc/pki/tls/cert.pem |
| Red Hat Enterprise Linux 8 | 1.1.1 | /etc/pki/tls/cert.pem |
| Red Hat Enterprise Linux 7 | 1.0.1 | /etc/pki/tls/cert.pem |
| Red Hat Enterprise Linux 6 | 1.0.0-10 | /etc/pki/tls/cert.pem |
| SUSE Linux Enterprise 15 | 1.1.0 | /etc/ssl/certificações |
| SUSE Linux Enterprise 11, 12 | 1.0.1 | /etc/ssl/certificações |
| Ubuntu 22.04, 23.04 | 3.0.2 | /etc/ssl/certificações |
| Ubuntu 20,04 | 1.1.1 | /etc/ssl/certificações |
| Ubuntu 18.04 | 1.1.0 | /etc/ssl/certificações |
| Ubuntu 16.04 | 1.0.2 | /etc/ssl/certificações |
| Ubuntu 14.04 | 1.0.1 | /etc/ssl/certificações |
| Alpine 3.17, 3.18 | 3.0.1 | /etc/ssl/certificações |
Também pode especificar encriptação na string de ligação usando a Encrypt opção ao usar o SQLDriverConnect para ligar.
Ajustamento das Definições Keep-Alive TCP
A partir do Driver ODBC 17.4, a frequência com que o driver envia pacotes keep-alive e os retransmite quando uma resposta não é recebida é configurável.
Para configurar, adicione as seguintes definições à secção do driver em odbcinst.ini, ou à secção do DSN em odbc.ini. Ao conectar-se a uma DSN, o driver usará as configurações na seção da DSN, se disponíveis; caso contrário, ou ao conectar apenas com uma string de conexão, usará as configurações na seção do driver em odbcinst.ini. Se a definição não estiver presente em nenhum dos locais, o driver usa o valor padrão.
A partir do Driver ODBC 17.8, KeepAlive e KeepAliveInterval podem ser especificadas como palavras-chave na string de conexão.
KeepAlive=<integer>controla com que frequência o TCP tenta verificar se uma ligação ociosa ainda está intacta enviando um pacote de keep-alive. O padrão é 30 segundos.KeepAliveInterval=<integer>determina o intervalo que separa as retransmissões de keep-alive até ser recebida uma resposta. O padrão é 1 segundo.