Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Počínaje ovladačem Microsoft JDBC 4.0 pro SQL Server může aplikace použít vlastnost připojení AuthenticationScheme k označení, že se chce připojit k databázi pomocí integrovaného ověřování Typu 4 Kerberos. Další informace o vlastnostech připojení naleznete v tématu Nastavení vlastností připojení. Další informace o protokolu Kerberos naleznete v tématu Microsoft Kerberos.
Při použití integrovaného ověřování s Java Krb5LoginModule můžete modul nakonfigurovat pomocí třídy Krb5LoginModule.
Ovladač Microsoft JDBC pro SQL Server nastaví následující vlastnosti pro virtuální počítače IBM Java:
- useDefaultCcache = true
- moduleBanner = false
Ovladač Microsoft JDBC pro SQL Server nastaví následující vlastnosti pro všechny ostatní virtuální počítače Java:
- useTicketCache = true
- doNotPrompt = pravda
Poznámky
Před ovladačem Microsoft JDBC 4.0 pro SQL Server můžou aplikace určit integrované ověřování (pomocí protokolu Kerberos nebo NTLM, podle toho, který je k dispozici) pomocí vlastnosti připojení integratedSecurity a odkazováním na .dllmssql-jdbc_auth-version-arch<><>, jak je popsáno v části Sestavení adresy URL připojení.
Počínaje ovladačem Microsoft JDBC 4.0 pro SQL Server může aplikace použít vlastnost připojení authenticationScheme k označení, že se chce připojit k databázi pomocí integrovaného ověřování Kerberos pomocí čisté implementace Java Kerberos:
Pokud chcete integrované ověřování pomocí Krb5LoginModule, musíte stále zadat vlastnost připojení integratedSecurity=true. Pak byste také zadali vlastnost připojení authenticationScheme=JavaKerberos .
Pokud chcete dál používat integrované ověřování s mssql-jdbc_auth-<verze>-<architektura>.dll, stačí zadat vlastnost připojení integratedSecurity=true (a volitelně authenticationScheme=NativeAuthentication).
Pokud zadáte authenticationScheme=JavaKerberos , ale nezadáte také integratedSecurity=true, ovladač bude ignorovat vlastnost připojení authenticationScheme a očekává, že v připojovacím řetězci najde přihlašovací údaje pro uživatelské jméno a heslo.
Při vytváření připojení pomocí zdroje dat můžete programově nastavit schéma ověřování pomocí setAuthenticationScheme a (volitelně) nastavit SPN (hlavní název služby) pro připojení Kerberos pomocí setServerSpn.
Byl přidán nový protokolovací nástroj pro podporu ověřování Kerberos: com.microsoft.sqlserver.jdbc.internals.KerbAuthentication. Další informace naleznete v tématu operace trasování ovladače.
Následující pokyny vám pomůžou nakonfigurovat protokol Kerberos:
- Nastavte AllowTgtSessionKey na 1 v registru pro Windows. Další informace naleznete v tématu Položky registru protokolu Kerberos a konfigurační klíče KDC v systému Windows Server 2003.
- Ujistěte se, že konfigurace protokolu Kerberos (krb5.conf v prostředích UNIX) odkazuje na správnou sféru a KDC pro vaše prostředí.
- Inicializujte mezipaměť TGT pomocí kinit nebo přihlášení k doméně.
- Pokud aplikace, která používá authenticationScheme=JavaKerberos běží v operačních systémech Windows Vista nebo Windows 7, měli byste použít standardní uživatelský účet. Pokud ale aplikaci spustíte pod účtem správce, musí aplikace běžet s oprávněními správce.
Poznámka:
Atribut připojení serverSpn je podporován pouze ovladači Microsoft JDBC 4.2 a vyšší.
Hlavní názvy služeb
Hlavní název služby (SPN) je název, kterým klient jednoznačně identifikuje instanci služby.
Hlavní název služby (SPN) můžete zadat pomocí vlastnosti připojení serverSpn nebo jej můžete nechat automaticky vytvořit ovladačem (což je výchozí možnost). Tato vlastnost je ve formě: "MSSQLSvc/fqdn:port@REALM", kde fqdn je plně kvalifikovaný název domény, port je číslo portu a REALM je Kerberos sféra SQL Serveru velkými písmeny. Část sféry této vlastnosti je volitelná, pokud výchozí sféra konfigurace Kerberos je stejná sféra jako server a není ve výchozím nastavení zahrnuta. Pokud chcete podporovat scénář ověřování mezi sférami, ve kterém se výchozí sféra v konfiguraci Protokolu Kerberos liší od sféry serveru, je nutné nastavit hlavní název služby (SPN) s vlastností serverSpn.
Hlavní název služby (SPN) může vypadat například takto: MSSQLSvc/some-server.zzz.corp.contoso.com:1433@ZZZZ.CORP.CONTOSO.COM
Další informace o hlavních názvech služby (SPN) najdete tady:
Poznámka:
Před vydáním ovladače JDBC verze 6.2 byste pro správné použití protokolu Kerberos mezi sférami museli explicitně nastavit serverSpn.
Od verze 6.2 bude ovladač moct ve výchozím nastavení sestavit serverSpn i při použití protokolu Kerberos mezi sférami. I když jeden může používat serverSpn explicitně.
Vytvoření konfiguračního souboru přihlašovacího modulu
Volitelně můžete zadat konfigurační soubor Kerberos. Pokud není zadaný konfigurační soubor, platí následující nastavení:
Sun JVM (Java Virtual Machine)
com.sun.security.auth.module.Krb5LoginModule je vyžadován useTicketCache=true;
IBM JVM
com.ibm.security.auth.module.Krb5LoginModule požadováno useDefaultCcache = true;
Pokud se rozhodnete vytvořit konfigurační soubor modulu přihlášení, soubor musí mít tento formát:
<name> {
<LoginModule> <flag> <LoginModule options>;
<optional_additional_LoginModules, flags_and_options>;
};
Konfigurační soubor přihlášení se skládá z jedné nebo více položek, z nichž každá určuje, která základní ověřovací technologie se má použít pro konkrétní aplikaci nebo aplikace. Příklad:
SQLJDBCDriver {
com.sun.security.auth.module.Krb5LoginModule required useTicketCache=true;
};
Každá položka konfiguračního souboru modulu přihlášení se skládá z názvu následovaného jednou nebo více položkami specifickými pro LoginModule. Každá položka specifická pro LoginModule je ukončena středníkem a celá skupina položek specifických pro LoginModule je uzavřena ve složených závorkách. Každá položka konfiguračního souboru je ukončena středníkem.
Kromě toho, aby ovladač mohl získat přihlašovací údaje Kerberos pomocí nastavení zadaného v konfiguračním souboru modulu přihlášení, může ovladač použít existující přihlašovací údaje. Tato metoda může být užitečná, když vaše aplikace potřebuje vytvořit připojení pomocí více než přihlašovacích údajů jednoho uživatele.
Ovladač se pokusí použít existující přihlašovací údaje, pokud jsou k dispozici, a teprve potom se pokusí přihlásit pomocí zadaného modulu přihlášení. Proto se při použití Subject.doAs metody pro spuštění kódu v určitém kontextu vytvoří připojení s přihlašovacími údaji, které byly předány volání Subject.doAs.
Další informace naleznete v tématu Konfigurační soubor přihlášení JAAS a třída Krb5LoginModule.
Počínaje ovladačem Microsoft JDBC 6.2 lze název položky konfigurace modulu přihlášení předat pomocí vlastnosti připojení jaasConfigurationName. Tato metoda umožňuje každému připojení mít vlastní konfiguraci přihlášení nebo použít jiný název než SQLJDBCDriver.
Vytvoření konfiguračního souboru Kerberos
Další informace o konfiguračních souborech Kerberos najdete v tématu Požadavky protokolu Kerberos.
Tato ukázka je konfigurační soubor domény, kde YYYY a ZZZZ jsou názvy domén.
[libdefaults]
default_realm = YYYY.CORP.CONTOSO.COM
dns_lookup_realm = false
dns_lookup_kdc = true
ticket_lifetime = 24h
forwardable = yes
[domain_realm]
.yyyy.corp.contoso.com = YYYY.CORP.CONTOSO.COM
.zzzz.corp.contoso.com = ZZZZ.CORP.CONTOSO.COM
[realms]
YYYY.CORP.CONTOSO.COM = {
kdc = krbtgt/YYYY.CORP. CONTOSO.COM @ YYYY.CORP. CONTOSO.COM
default_domain = YYYY.CORP. CONTOSO.COM
}
ZZZZ.CORP. CONTOSO.COM = {
kdc = krbtgt/ZZZZ.CORP. CONTOSO.COM @ ZZZZ.CORP. CONTOSO.COM
default_domain = ZZZZ.CORP. CONTOSO.COM
}
Povolení konfiguračního souboru domény a konfiguračního souboru modulu přihlášení
Konfigurační soubor domény můžete povolit pomocí souboru -Djava.security.krb5.conf. Konfigurační soubor modulu přihlášení můžete povolit pomocí -Djava.security.auth.login.config.
K spuštění aplikace můžete použít například následující příkaz:
Java.exe -Djava.security.auth.login.config=SQLJDBCDriver.conf -Djava.security.krb5.conf=krb5.ini <APPLICATION_NAME>
Ověření přístupu k SQL Serveru přes Kerberos
V aplikaci SQL Server Management Studio spusťte následující dotaz:
select auth_scheme from sys.dm_exec_connections where session_id=@@spid
Ujistěte se, že máte potřebná oprávnění ke spuštění tohoto dotazu.
Omezené delegování
Počínaje ovladačem Microsoft JDBC 6.2 ovladač podporuje omezené delegování protokolu Kerberos. Delegované přihlašovací údaje lze předat jako org.ietf.jgss.GSSCredential objekt, tyto přihlašovací údaje používají ovladač k navázání připojení.
Properties driverProperties = new Properties();
GSSCredential impersonatedUserCredential = [userCredential]
driverProperties.setProperty("integratedSecurity", "true");
driverProperties.setProperty("authenticationScheme", "JavaKerberos");
driverProperties.put("gsscredential", impersonatedUserCredential);
Connection conn = DriverManager.getConnection(CONNECTION_URI, driverProperties);
Připojení Kerberos s použitím hlavního názvu, hesla a sféry
Počínaje ovladačem Microsoft JDBC 6.2 může ovladač navázat připojení Kerberos pomocí hlavního názvu a hesla předaného v připojovacím řetězci.
jdbc:sqlserver://servername=server_name;encrypt=true;integratedSecurity=true;authenticationScheme=JavaKerberos;userName=user@REALM;password=<password>
Vlastnost uživatelského jména nevyžaduje "REALM", pokud uživatel patří do "default_realm" nastavené v souboru krb5.conf. Když jsou userName a password nastaveny spolu s integratedSecurity=true; a vlastností authenticationScheme=JavaKerberos;, připojení je vytvořeno s uživatelským jménem jako Kerberos Principal spolu se zadaným heslem.
Počínaje ovladačem Microsoft JDBC 9.4 může uživatel zadat sféru pro ověřování protokolem Kerberos v připojovacím řetězci.
jdbc:sqlserver://servername=server_name;encrypt=true;integratedSecurity=true;authenticationScheme=JavaKerberos;userName=user;password=<password>;realm=REALM
Použití ověřování kerberos z unixových strojů ve stejné doméně
V této příručce se předpokládá, že funkční nastavení Kerberos již existuje. Na počítači s Windows spusťte následující kód s funkčním ověřováním Kerberos a ověřte, jestli je výše uvedený kód pravdivý. Kód v případě úspěchu vypíše do konzoly "Schéma ověřování: KERBEROS". Mimo zadané příznaky spuštění, závislosti ani nastavení ovladačů nejsou vyžadovány žádné další. Stejný blok kódu je možné spustit v Linuxu a ověřit úspěšná připojení.
SQLServerDataSource ds = new SQLServerDataSource();
ds.setServerName("<server>");
ds.setPortNumber(1433); // change if necessary
ds.setIntegratedSecurity(true);
ds.setAuthenticationScheme("JavaKerberos");
ds.setDatabaseName("<database>");
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));
}
}
- Připojte klientský počítač ke stejné doméně jako server.
- (Volitelné) Nastavte výchozí umístění lístku Kerberos. Tento krok se nejpohodlněji provádí nastavením
KRB5CCNAMEproměnné prostředí. - Získejte lístek Kerberos buď vygenerováním nového lístku, nebo umístěním existujícího lístku do výchozího umístění lístku Kerberos. Pokud chcete vygenerovat lístek, použijte terminál a inicializujte ho prostřednictvím
kinit USER@DOMAIN.AD, kde "USER" a "DOMAIN.AD" jsou hlavní jméno a doména. Například:kinit SQL_SERVER_USER03@EXAMPLE.COM. Lístek se vygeneruje ve výchozím umístění lístku nebo v cestěKRB5CCNAME, pokud je nastavená. - V terminálu se zobrazí výzva k zadání hesla a zadejte heslo.
- Ověřte přihlašovací údaje v lístku prostřednictvím
klista potvrďte, že přihlašovací údaje jsou ty, které chcete použít pro ověření. - Spusťte výše uvedený ukázkový kód a ověřte, že ověřování kerberos proběhlo úspěšně.
Integrace nativní platformy GSS
Integrace nativní platformy GSS umožňuje aplikacím v Javě používat nativní GSS-API místo kryptografických mechanismů implementace sady JDK rozhraní GSS-API. Například následující ukázkový kód ukazuje, jak povolit použití nativního GSS-API v ovladači:
GSSCredential credential = GSSManager.getInstance().createCredential(null, GSSCredential.DEFAULT_LIFETIME, new Oid("1.2.840.113554.1.2.2"), GSSCredential.INITIATE_ONLY);
SQLServerDataSource ds = new SQLServerDataSource();
ds.setURL("jdbc:sqlserver://<server>;databaseName=<database>;integratedSecurity=true;authenticationScheme=JavaKerberos;");
ds.setGSSCredentials(credential);
ds.getConnection();
try (Connection conn = ds.getConnection()) {
ResultSet rs = conn.executeQuery("select auth_scheme from sys.dm_exec_connections where session_id=@@spid")) {
while (rs.next()) {
System.out.println("Authentication Scheme: " + rs.getString(1));
}
}
Kromě toho jsou vyžadovány také následující argumenty prostředí JVM:
-Dsun.security.jgss.native=true
-Djavax.security.auth.useSubjectCredsOnly=false
Volitelně můžete také zadat cestu k nativní knihovně GSS.
-Dsun.security.jgss.lib=path/to/native/gss/library // This is optional
Další informace o argumentech JVM najdete v oficiální dokumentaci k Javě.
Rozšířená ochrana s protokolem Kerberos
Rozšířenou ochranu protokolu Kerberos můžete povolit také při použití ovladače JDBC. Jediné omezení, které platí pro ovladač JDBC při použití rozšířené ochrany, nesmí být povolené vynucení šifrování.
Další informace o povolení rozšířené ochrany najdete v tématech:
Další informace o připojení pomocí šifrování najdete v tématech: