Posso ligar para o SQL Server utilizando a autenticação do Windows a partir do Java EE webapp?

StackOverflow https://stackoverflow.com/questions/167464

Pergunta

Atualmente, estou investigando como fazer uma conexão com um banco de dados SQL Server do meu aplicativo web Java EE usando autenticação do Windows em vez da autenticação SQL Server. Estou executando este aplicativo fora do Tomcat 6.0, e estou utilizando o driver Microsoft JDBC. As minhas propriedades de conexão olhares arquivo da seguinte forma:

dbDriver              = com.microsoft.sqlserver.jdbc.SQLServerDriver
dbUser                = user
dbPass                = password
dbServer              = localhost:1433;databaseName=testDb
dbUrl                 = jdbc:sqlserver://localhost:1433

Tenho zero problemas com a conexão com um banco de dados SQL Server desta forma quando utilizar a autenticação SQL Server.

Existe alguma maneira que eu possa recuperar as credenciais de autenticação do Windows do usuário e uso que de autenticação para o SQL Server?

Atualizar : Eu sei que em ASP.net há uma maneira de configurar a autenticação do Windows para o acesso ao webapp, que é exatamente o que estou procurando, exceto eu quero passar isso fora de token para o SQL Server para o acesso ao banco de dados.

Foi útil?

Solução

Eu não acho que alguém pode empurrar as credenciais do usuário do navegador para o banco de dados (e faz isso faz sentido? Eu não acho)

Mas se você quiser usar as credenciais do usuário executando o Tomcat para se conectar ao SQL Server, em seguida, você pode usar JDBC driver da Microsoft. Basta construir seu JDBC URL como esta:

jdbc:sqlserver://localhost;integratedSecurity=true;

E copiar o DLL apropriado para o diretório bin do Tomcat (sqljdbc_auth.dll fornecido com o condutor)

MSDN> Ligar ao SQL Server com o driver JDBC> Construindo a URL de conexão

Outras dicas

olhada

http://jtds.sourceforge.net/faq.html#driverImplementation

O que é o formato de URL usado por jTDS?

O formato de URL para jTDS é:

jdbc:jtds:<server_type>://<server>[:<port>][/<database>][;<property>=<value>[;...]]

... domínio Especifica o domínio do Windows para autenticar. Se presente e o nome de usuário e senha são fornecidos, jTDS usa o Windows (NTLM) em vez da autenticação de costume SQL Server (ou seja, o usuário e senha fornecidos são o usuário de domínio e senha). Isso permite que clientes não-Windows para efetuar login em servidores que só são configurados para aceitar a autenticação do Windows.

Se o parâmetro de domínio está presente, mas nenhum nome de usuário e senha são fornecidos, jTDS usa sua nativa Single-Sign-On biblioteca e registros com o registrado credenciais do usuário do Windows (para este trabalho seria, obviamente, precisa ser no Windows , conectado a um domínio, e também tem a biblioteca SSO instalado -. consultar README.SSO na distribuição sobre como fazer isso)

Isso realmente funciona para mim:

Por do README.SSO que vem com a distribuição jtdsd:

Para que o Single Sign On para o trabalho, jTDS deve ser capaz de carregar o ntlmauth.dll biblioteca SPPI nativa. Coloque isso em qualquer lugar DLL no caminho do sistema (definida pela variável de sistema PATH) e você está tudo definido.

Eu coloquei isso na minha jre / bin

Eu configurei uma porta dedicada a instância do servidor SQL (2302) para aliviar a necessidade de um nome de instância - apenas algo que eu faço. lportal é o meu nome do banco de dados.

jdbc.default.url=jdbc:jtds:sqlserver://192.168.0.147:2302/lportal;useNTLMv2=true;domain=mydomain.local

A menos que tenha algum motivo realmente convincente não, sugiro deixando de lado o driver MS JDBC.

Em vez disso, use o jTDS driver JDBC . Leia o arquivo README.SSO na distribuição jTDS sobre como configurar para single-sign-on (autenticação nativa) e onde colocar a DLL nativa para garantir que ele pode ser carregado pela JVM.

Eu estava tendo problema com a conexão com MS SQL 2005 usando autenticação do Windows. Eu era capaz de resolver o problema com a ajuda de este e outros fóruns. Aqui está o que eu fiz:

  1. Instale o driver JTDS
  2. Não use o "domínio =" propriedade no jdbc: jTDS :: // [:] [/] [; = [; ...]] string
  3. Instale o ntlmauth.dll em c:. \ Windows \ system32 (não foi necessário o registo da dll) na máquina do servidor web
  4. Alterar a identidade logon para o serviço Apache Tomcat para um usuário de domínio com acesso ao servidor de banco de dados SQL (que não era necessário para que o usuário tem acesso ao dbo.master).

O meu ambiente: Windows XP clinet hospedagem Apache Tomcat 6 com MS SQL backend de 2005 sobre Windows 2003

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top