anúncios

Mostrando postagens com marcador MS SQL Server. Mostrar todas as postagens
Mostrando postagens com marcador MS SQL Server. Mostrar todas as postagens

terça-feira, 4 de novembro de 2025

Conectando ao MS SQL Server com autenticação do usuário do Windows (Windows Authentication) em Java

Ao trabalhar com sistemas corporativos que utilizam o Microsoft SQL Server, é comum encontrar ambientes configurados para autenticação integrada do Windows. Isso significa que o acesso ao banco de dados é feito com base nas credenciais do usuário logado no sistema operacional, dispensando o uso de nome de usuário e senha definidos diretamente no banco.

Quando desenvolvemos aplicações Java que precisam se conectar ao SQL Server usando esse tipo de autenticação, é necessário realizar uma configuração específica no driver JDBC. Caso contrário, a aplicação não conseguirá autenticar corretamente o usuário e a conexão falhará.

Por que é necessário o arquivo msql-jdbc_auth.dll?

O driver oficial do SQL Server para Java, conhecido como Microsoft JDBC Driver for MS QL Server, oferece suporte à autenticação integrada do Windows através de uma biblioteca nativa chamada msql-jdbc_auth.dll.

Essa DLL atua como uma ponte entre o Java e as APIs do Windows responsáveis pela autenticação. Sem ela, o Java não teria acesso ao contexto de segurança do sistema operacional, e a tentativa de conexão com autenticação integrada resultaria em erro.

Em resumo, o Java precisa desse componente nativo para poder "herdar" as credenciais do usuário logado e repassá-las ao SQL Server de forma segura.

Passo a passo para configurar

  1. Download o driver JDBC oficial
  2. Acesse o site oficial da Microsoft e baixe o driver JDBC mais recente.

    No momento da escrita deste artigo, a versão disponível é a 12.8.1, e o link direto de download é: https://go.microsoft.com/fwlink?linkid=2283744

  3. Descompactar o pacote
  4. Após o download, descompacte o arquivo. Dentro da pasta extraída você encontrará o driver mssql-jdbc-12.8.1.jar (ou .jre11, .jre17, conforme sua versão do Java) e também a biblioteca nativa msql-jdbc_auth-12.8.1.x64.dll.

  5. Copiar a DLL para o diretório correto
  6. Copie o arquivo msql-jdbc_auth-12.8.1.x64.dll para o diretório bin da instalação do Java.

    Exemplo de caminho no Windows:

    C:\Program Files\Java\jdk-17\bin

    Esse diretório faz parte do java.library.path, o que garante que a JVM consiga localizar a DLL durante a execução.

  7. Configurar a string de conexão
  8. A string de conexão deve informar que será usada a autenticação integrada.

    Exemplo:

    String connectionUrl = "jdbc:sqlserver://localhost:1433;"
    + "databaseName=MinhaBase;"
    + "integratedSecurity=true;";
    Connection conn = DriverManager.getConnection(connectionUrl);

    Para projetos Spring Boot, configure no arquivo application.properties:

    spring.datasource.url=jdbc:sqlserver://IPSERVIDORDBMSSQLSERVER:1433;databaseName=MinhaBase;integratedSecurity=true;
    spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

    Caso use Quarkus, a configuração fica assim:

    quarkus.datasource.jdbc.url=jdbc:sqlserver://IPSERVIDORDBMSSQLSERVER:1433;databaseName=MinhaBase;integratedSecurity=true;
    quarkus.datasource.jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver

    Observe o parâmetro integratedSecurity=true, que é o que ativa o uso da DLL para autenticação.

  9. Executar a aplicação
  10. Com a DLL no diretório correto e o driver JDBC configurado no classpath, sua aplicação Java será capaz de se conectar ao SQL Server utilizando as credenciais do usuário do Windows atual.

Configuração para Linux com Windows Authentication

Em sistemas Linux, a autenticação integrada não funciona nativamente com a DLL, pois ela é específica do Windows.

Nesse caso, o método recomendado é usar Kerberos, o mesmo protocolo que o Active Directory utiliza para autenticação entre domínios.

Passos para configurar no Linux

  1. Instale os pacotes necessários
  2. Em distribuições baseadas em Debian/Ubuntu:

    sudo apt install krb5-user libsasl2-modules-gssapi-mit

    No Fedora:

    sudo dnf install krb5-workstation
  3. Configure o arquivo /etc/krb5.conf
  4. Adicione o domínio e o servidor KDC da sua rede corporativa.

    Exemplo:

    
    [libdefaults]
        default_realm = MINHAEMPRESA.LOCAL
        dns_lookup_kdc = true
        dns_lookup_realm = true
    
    [realms]
        MINHAEMPRESA.LOCAL = {
            kdc = dc1.minhaempresa.local
        }
    
    
  5. Obtenha um ticket Kerberos com seu usuário do domínio
  6. kinit usuario@MINHAEMPRESA.LOCAL

    Após autenticar, você pode confirmar o ticket com:

    klist
  7. Configure a conexão JDBC
  8. No application.properties (Spring Boot ou Quarkus), a URL deve indicar o uso do principal Kerberos:

    Spring

    spring.datasource.url=jdbc:sqlserver://IPSERVIDORDBMSSQLSERVER:1433;databaseName=MinhaBase;authenticationScheme=JavaKerberos;
    spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

    Quarkus

    quarkus.datasource.jdbc.url=jdbc:sqlserver://IPSERVIDORDBMSSQLSERVER:1433;databaseName=MinhaBase;authenticationScheme=JavaKerberos;
    quarkus.datasource.jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver

    A opção authenticationScheme=JavaKerberos instrui o driver JDBC a usar o ticket obtido via kinit.

Considerações finais

Essa configuração é especialmente útil em ambientes corporativos onde a política de segurança exige Single Sign-On (SSO) e o gerenciamento centralizado de permissões. Além disso, evita o armazenamento de senhas no código-fonte ou em arquivos de configuração, o que aumenta a segurança da aplicação.

Vale lembrar que a autenticação integrada funciona apenas quando a aplicação Java está sendo executada em um ambiente Windows. Para servidores Linux, é necessário configurar o Kerberos e utilizar parâmetros adicionais no driver.

Em resumo, a presença da DLL msql-jdbc_auth é fundamental para que o Java consiga usar a autenticação nativa do Windows ao se conectar ao MS SQL Server. Com ela corretamente posicionada e o driver JDBC configurado, o processo de autenticação se torna transparente e seguro, aproveitando os recursos já disponíveis no sistema operacional.

Feito!

terça-feira, 22 de outubro de 2024

Aprenda SQL do zero ao avançado

SQL (Structured Query Language) é uma linguagem de programação utilizada principalmente para interagir com bancos de dados relacionais. É fundamental entender o conceito de Sistema Gerenciador de Banco de Dados (SGBD) antes de mergulhar na aprendizagem de SQL.

Conceito de SGBD

Um Sistema Gerenciador de Banco de Dados (SGBD) é um software que permite criar, organizar, armazenar, recuperar e manipular dados em um banco de dados. Os principais componentes de um SGBD incluem:

  • Motor de banco de dados
  • Linguagem de consulta
  • Interface de usuário
  • Sistema operacional

Exemplo prático: MySQL

MySQL é um dos SGBDs mais populares e amplamente utilizado. Ele oferece uma interface de linha de comando e suporta várias linguagens de programação.

MariaDB

O MariaDB é um SGBD multiplataforma lançado em 2009, fork do MySQL. Algumas de suas vantagens incluem:

  • Baseado no MySQL
  • Licença GNU GPL
  • Multiplataforma

PostgreSQL

O PostgreSQL é outro SGBD muito popular e avançado. Algumas de suas principais características incluem:

  • Open source, sob a licença BSD e multiplataforma
  • Suporta diferentes tipos de dados
  • Meios de consulta mais complexos
  • Chaves estrangeiras e outros recursos avançados
  • Escalável para projetos de maior escala

Oracle Database

O Oracle Database é um dos SGBDs mais utilizados em aplicações corporativas:

  • Desenvolvido pela Oracle Corporation
  • Multiplataforma
  • Licença comercial
  • Suporta desde demandas simples até complexas
  • Excelente para aplicações corporativas

Microsoft SQL Server

O Microsoft SQL Server é desenvolvido pela Microsoft:

  • Disponível para Windows e Linux
  • Possui licença proprietária
  • Atende desde demandas simples até complexas
  • Robustos recursos de segurança
  • Meios de criptografia avançados

Criação do container MySQL

É necessário ter o Docker instalado no SO (Windows, Linux). Caso estja no Windows, habilite o recurso WSL2 e na loja Microsoft, pesquise Ubuntu, após a instalação do Ubuntu no WSL2, abre o terminal do Linux (Ubuntu) e segue os procedimentos abaixo dos itens 1 até 4, caso já estiver com Docker, continue no item 5.

  1. Atualização do sistema
  2. sudo apt update && sudo apt upgrade -y
  3. Instalação do Docker
  4. sudo apt install docker.io -y
  5. Inicialização do serviço Docker
  6. sudo systemctl start docker
  7. Habilitar a inicializaçao do serviço Docker no boot do sistema
  8. sudo systemctl enable docker
  9. Criar o conteiner MySQL
  10.   sudo docker run -d \
      --name projeto1_mysql \
      -p 3306:3306 \
      -e MYSQL_ROOT_PASSWORD=secret \
      -e MYSQL_DATABASE=projeto1 \
      -v projeto1_data:/var/lib/mysql \
      mysql:8
      
      

Conectando ao banco de dados

Utilizando um cliente MySQL (DBeaver), conecte no banco de dados com as devidas credenciais (usuário e senha) definido na instalação e host/porta.

Host: 127.0.0.1

Port: 3306

Username: root

Password: secret

Database: projeto1

Criação das tabelas usuários e pedido

Utilizando o banco de dados projeto1, antes de criar as tabelas, precisa selecionar qual banco de dados que serão criadas. Para isso, execute:

USE projeto1;

CREATE TABLE usuarios (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(255),
    email VARCHAR(255) UNIQUE,
    data_nascimento DATE
);

CREATE TABLE pedidos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    usuario_id INT,
    produto VARCHAR(255),
    preco DECIMAL(10,2),
    quantidade INT,
    data_pedido DATE,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id)
);

A tabela pedidos tem as seguintes características:
  1. O campo id é o identificador principal da tabela, gerado automaticamente pelo MySQL.
  2. usuario_id é um campo que relaciona os pedidos aos usuários específicos.
  3. produto armazena o nome do produto comprado.
  4. preco armazena o preço do produto com duas casas decimais.
  5. quantidade indica quantos itens foram comprados.
  6. data_pedido registra a data em que o pedido foi feito.
  7. Adicionamos uma chave estrangeira (FOREIGN KEY) para estabelecer uma relação entre pedidos e usuarios.

Esta estrutura permite que você mantenha dados sobre os usuários e seus respectivos pedidos, facilitando análises e consultas mais complexas posteriormente.

Fundamentos básicos de SQL

Agora, vamos explorar alguns conceitos básicos de SQL:

SELECT

O comando SELECT é usado para recuperar dados de uma ou mais tabelas.

Exemplo prático:

SELECT * FROM usuarios;

Este comando retorna todos os registros da tabela usuarios.

INSERT

O comando INSERT é utilizado para inserir novos registros em uma tabela.

Exemplo prático:

INSERT INTO usuarios (nome, email, data_nascimento) VALUES ('Bjorn Cyril', 'bjorn.cyril@hotmail.com', '1990-11-07');

INSERT INTO pedidos (id, usuario_id, produto, preco, quantidade, data_pedido) VALUES (1, 1, 'Camiseta Azul', 29.99, 2, '2024-10-20');

UPDATE

O comando UPDATE é usado para modificar dados existentes em uma tabela.

WARNING: Sempre utilize o WHERE no comando UPDATE

Exemplo prático:

UPDATE usuarios SET email = 'bjorn.cyril@gmail.com' WHERE id = 1;

DELETE

O comando DELETE é utilizado para remover registros de uma tabela.

WARNING: Sempre utilize o WHERE no comando DELETE

Exemplo prático:

DELETE FROM usuarios WHERE id = 1;

Consultas Avançadas

Vamos explorar algumas técnicas mais avançadas de SQL:

JOIN

O JOIN é usado para combinar dados de duas ou mais tabelas relacionadas.

Exemplo prático:

SELECT u.nome, p.preco FROM usuarios u JOIN pedidos p ON u.id = p.usuario_id;

Este exemplo mostra como combinar dados dos usuários e seus pedidos.

GROUP BY

O GROUP BY agrupa resultados por valores específicos.

Exemplo prático:

SELECT COUNT(*) AS quantidade_pedidos, AVG(preco) AS media_preco FROM pedidos GROUP BY usuario_id;

Este comando retorna a quantidade de pedidos e a média de preço por usuário.

Conceitos avançados

Agora vamos mergulhar em alguns conceitos mais avançados de SQL:

Subquery

Uma subquery é uma consulta dentro de outra consulta.

Exemplo prático:


SELECT *
FROM usuarios
WHERE id IN (
    SELECT usuario_id
    FROM pedidos
    WHERE preco > 100
);

Esta consulta seleciona usuários que fizeram pedidos com valor superior a 100.

UNION

O UNION combina os resultados de duas ou mais consultas.

Exemplo prático:


SELECT nome, email
FROM usuarios
UNION
SELECT nome, email
FROM clientes;

Este comando combina os resultados das tabelas usuarios e clientes.

A tabela clientes não foi criada, antes de executar, crie a tabela clientes, com base dos exemplos das tabela pedidos.

Comandos úteis do Docker

Para parar o container

sudo docker stop projeto1_mysql

Para iniciar o container

sudo docker start projeto1_mysql

Para remover o container

sudo docker rm projeto1_mysql

Para remover o volume

sudo docker volume rm projeto1_data

Considerações finais

SQL é uma linguagem poderosa e versátil que forma a base de muitos sistemas de banco de dados modernos. Compreender esses conceitos básicos e avançados é fundamental para qualquer desenvolvedor ou analista de dados.

Pratique regularmente e explore diferentes bancos de dados para melhorar suas habilidades. Lembre-se de que a prática é a chave para dominar SQL efetivamente.

Feito!

terça-feira, 27 de novembro de 2018

Instalando e configurando o Adminer

O que é Adminer?

Adminer é uma ferramenta web para gerenciar banco de dados, alternativa melhor ao PHPMyAdmin, pois suporta os SGBDS: MySQL/MariaDB, PostgreSQL, SQLite, MS SQL Server, Oracle.

Considerando que já tenha o webserver Apache e o PHP instalado e devidamente configurado, então podemos iniciar os procedimentos de instalação e configuração do Adminer.

Procedimentos de instalação e configuração do Adminer
Clonar o repositório Adminer do Github no diretório raiz do Apache
No Debian e Ubuntu é: /var/www/html
$ cd /var/www/html
$ git clone https://github.com/vrana/adminer.git
$ cd /var/www/html/adminer

Criar o VHost Adminer
No diretório /etc/apache2/sites-available , crie o arquivo adminer.conf com o conteúdo abaixo:
< VirtualHost *:80 >
#ServerAdmin root@localhost
ServerName adminer.local
DocumentRoot "/var/www/html/adminer"
ErrorLog ${APACHE_LOG_DIR}/error-adminer.log
CustomLog ${APACHE_LOG_DIR}/access-adminer.log combined

DirectoryIndex index.php index.html index.htm
AllowOverride All
Order allow,deny
Allow from all

< /VirtualHost >
Ativar o VHost Adminer
# a2ensite adminer.conf

Reload do Apache
# systemctl reload apache2

Adicionar o VHost no arquivo hosts
# vim /etc/hosts
127.0.0.1      adminer.local
No browser digite na url http://adminer.local/adminer

Screenshots do Adminer
Login



Logado



Feito!

segunda-feira, 26 de novembro de 2018

Conhecendo o DBeaver

O que é DBeaver?

DBeaver é um software cliente SGBD (Sistema Gerenciador de Banco de Dados). Para bancos de dados relacionais, ele usa a API do JDBC para interagir com bancos de dados por meio de um driver JDBC. Para outros bancos de dados (NoSQL), ele usa drivers de banco de dados proprietários. Ele fornece um editor que suporta o preenchimento de código e o realce de sintaxe. Este software foi escrito em Java e baseado na IDE Eclipse.

O DBeaver é um software livre, open source, distribuído pela licença do Apache. Uma edição corporativa de código fechado do DBeaver é distribuída sob uma licença comercial, nesse caso é para bancos de dados (NoSQL).

O DBeaver foi iniciado em 2010 como um projeto de hobby. Era para ser livre, de código aberto, ter uma interface de usuário elegante e conveniente e incluir recursos usados com freqüência para desenvolvedores de banco de dados. O primeiro lançamento oficial foi em 2011

Em 2014, a versão Enterprise Edition (EE) foi lançada. A versão EE é baseada no CE, mas também fornece suporte a bancos de dados NoSQL / BigData (Cassandra, MongoDB e Redis) e inclui alguns plug-ins adicionais do Eclipse.

Em 2015, o código fonte do DBeaver foi transferido para o GitHub .

Em 2017, o DBeaver CE foi relicenciado sob a licença Apache (a partir da versão 4.x).

Em julho de 2017, a versão do DBeaver EE tornou-se comercial para suportar a versão CE.

Suporte e versões

O DBeaver é software multiplataforma e trabalha com suporte no Eclipse. Disponível para os sistemas operacionais: Windows, GNU/Linux, MacOS X, Solaris. Suporta aos idiomas: Inglês, Chinês, Russo, Italiano e Alemão.

Community Edition

Community Edition (CE) é a versão inicial do DBeaver. Foi lançado em 2010 e tornou-se open-source (GPL) em 2011.

A versão CE inclui suporte estendido dos seguintes SGBDs:
  • MySQL/MariaDB
  • PostgreSQL
  • Oracle
  • MS SQL Server
  • SQLite
  • Firebird
  • DB2 (LUW)
  • Sybase
  • Teradata
  • Informix
  • Apache Derby
  • Apache Phoenix
  • Qualquer outro SGBD que tenha driver JDBC ou ODBC.
Eclipse Plugin Edition

A versão do plug-in do Eclipse foi lançada no Eclipse Marketplace. Essa versão é usada por programadores que usam o Eclipse IDE para desenvolvimento de software e que precisam de uma ferramenta de gerenciamento de banco de dados diretamente em seu IDE. O plug-in do Eclipse inclui a maioria dos recursos do Community Edition e também é liberado sob licença GPL.

Enterprise Edition

O DBeaver 3.x anunciou o suporte de bancos de dados NoSQL (Cassandra e MongoDB na versão inicial). Desde então, o DBeaver foi dividido nas edições Community e Enterprise. O Enterprise Edition tem suporte a bancos de dados NoSQL, gerenciador de consultas persistente e alguns outros recursos de nível corporativo. A versão EE não é de código aberto e requer a compra de uma licença (uma licença de avaliação pode ser gerada gratuitamente).

A versão Enterprise Edition inclui suporte aos bancos NoSQL:
  • Cassandra
  • MongoDB
  • Redis
Recursos
Os recursos do DBeaver incluidos são:
  • Execução de querys SQL ANSI
  • Numeração de linhas no editor
  • Sintaxe highlighting e SQL autocompletar
  • Gerenciamento de scripts SQL
  • Gera DDL
  • Redesenha o DER
  • Tunelamento SSH
  • SSL (MySQL e PostgreSQL)
  • Exportar e importar bases de dados
Instalação do DBeaver
Pré requisitos

Como o DBeaver foi implementado em Java, então para poder executar é necessário ter o JRE instalado e configurado no PATH. Caso você programa em Java, certamente já deve ter o JDK, então já está com o pré requisito instalado.

Resumindo: Para quem não programa em Java, instale o JRE e configure no PATH no seu sistema operacional.

Já para quem programa em Java, configure o JDK no PATH do seu sistema operacional.

Após ter o JRE ou JDK configurado no PATH do seu sistema operacional, faça o download do DBeaver e o processo de instalação é basicamente extrair em algum diretório de sua preferência e executar o arquivo dbeaver. Obviamente que poderá adicionar como atalho no menu, porém não será mostrado nesse post, porque varia de ambiente desktop (Gnome, KDE, XFCE, LXDE, etc).

No meu caso extrair no diretório downloads e a versão até a data de publicação deste post é 5.1.3, basicamente só troca a versão.

$ tar -xzvf dbeaver-ce-5.1.3-linux.gtk.x86_64.tar.gz
$ cd dbeaver
$ ./dbeaver

Screenschot DBeaver



Feito!