NTLM 認証を使用して SQL Server に接続する
SQL Server 用 Microsoft JDBC ドライバー では、アプリケーションで authenticationScheme 接続プロパティを使用して、NTLM v2 認証を使用してデータベースに接続することを示すことができます。
NTLM 認証には、次のプロパティも使用されます。
- domain = domainName (省略可能)
- user = userName
- password = password
- integratedSecurity = true
domain 以外のプロパティは必須です。NTLM authenticationScheme プロパティが使用されている場合、どれかが不足していると、ドライバーによってエラーがスローされます。
接続プロパティの詳細については、「接続プロパティの設定」を参照してください。 Microsoft NTLM 認証プロトコルの詳細については、Microsoft NTLM に関するページを参照してください。
解説
NTLM 認証の動作を制御する、SQL Server 設定の詳細については、ネットワーク セキュリティ:LAN Manager 認証レベルに関するページを参照してください。
ログ記録
NTLM 認証をサポートするために、新しいロガー com.microsoft.sqlserver.jdbc.internals.NTLMAuthentication が追加されました。 詳細については、「ドライバー操作のトレース」を参照してください。
DataSource
データソースを使用して接続を作成する場合、NTLM プロパティは、setAuthenticationScheme、setDomain、および (必要に応じて) setServerSpn を使用してプログラムで設定できます。
SQLServerDataSource ds = new SQLServerDataSource();
ds.setServerName("<server>");
ds.setPortNumber(1433); // change if necessary
ds.setIntegratedSecurity(true);
ds.setAuthenticationScheme("NTLM");
ds.setDomain("<domainName>");
ds.setUser("<userName>");
ds.setPassword("<password>");
ds.setDatabaseName("<database>");
ds.setServerSpn("<serverSpn");
try (Connection c = ds.getConnection(); Statement s = c.createStatement();
ResultSet rs = s.executeQuery("select auth_scheme from sys.dm_exec_connections where session_id=@@spid")) {
while (rs.next()) {
System.out.println("Authentication Scheme: " + rs.getString(1));
}
}
サービス プリンシパル名
サービス プリンシパル名 (SPN) は、クライアントがサービスのインスタンスを一意に識別するための名前です。
serverSpn 接続プロパティを使用して SPN を指定できますが、ドライバーで自動的に作成することもできます (既定)。 このプロパティの形式は "MSSQLSvc/fqdn:port@REALM" です。ここで、fqdn は完全修飾ドメイン名、port はポート番号、REALM は大文字で表記された SQL Server の領域です。 既定の領域がサーバーの領域と同じであるため、このプロパティの領域部分は省略可能です。
たとえば、SPN は次のようになります。"MSSQLSvc/some-server.zzz.corp.contoso.com:1433"
サービス プリンシパル名 (SPN) の詳細については、以下を参照してください。
Note
serverSpn 接続属性は、Microsoft JDBC Driver 4.2 以降でのみサポートされています。
6.2 リリースより前の JDBC driver では、serverSpn を明示的に設定する必要があります。 6.2 リリースの場合、ドライバーは既定で Serverspn を構築でき ますが、 serverspnを明示的に使用することもできます。
セキュリティ リスク
NTLM プロトコルは、さまざまな脆弱性を持つ古い認証プロトコルであり、セキュリティ上のリスクがあります。 これは脆弱な暗号スキームに基づいており、攻撃に対して脆弱です。 NTLM は、より安全で推奨される Kerberos に置き換えられました。 NTLM 認証は、セキュリティで保護された信頼できる環境、または Kerberos を使用できない場合にのみ使用してください。
SQL Server 用 Microsoft JDBC ドライバー では、NTLM v2 のみサポートされています。これは、元の v1 プロトコルよりもセキュリティが強化されています。 拡張保護を有効にするか、TLS 暗号化を使用して、セキュリティを強化することもお勧めします。
拡張保護を有効にする方法の詳細については、以下を参照してください。
暗号化を使用した接続の詳細については、以下を参照してください。
Note
7.4 リリースでは、拡張保護と暗号化の両方を有効にすることはサポートされていません。