Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
JDBC sürücüsünü indirin
SQL Server için Microsoft JDBC Sürücüsü 4.0'dan başlayarak, bir uygulama tür 4 Kerberos tümleşik kimlik doğrulaması kullanarak bir veritabanına bağlanmak istediğini belirtmek için authenticationScheme connection özelliğini kullanabilir. Bağlantı özellikleri hakkında daha fazla bilgi için bkz: Bağlantı Özelliklerini Ayarlama. Kerberos hakkında daha fazla bilgi için bkz: Microsoft Kerberos.
Java Krb5LoginModule ile tümleşik kimlik doğrulaması kullanırken, modülü Krb5LoginModule Sınıfını kullanarak yapılandırabilirsiniz.
SQL Server için Microsoft JDBC Sürücüsü, IBM Java VM'leri için aşağıdaki özellikleri ayarlar:
- useDefaultCcache = doğru
- moduleBanner = yanlış
SQL Server için Microsoft JDBC Sürücüsü, diğer tüm Java VM'leri için aşağıdaki özellikleri ayarlar:
- useTicketCache = doğru
- doNotPrompt = doğru
Açıklamalar
SQL Server için Microsoft JDBC Sürücüsü 4.0'dan önce, uygulamalar Bağlantı URL'sini Oluşturma bölümünde açıklandığı gibi < connection özelliğini kullanarak ve mssql-jdbc_auth-version-arch><>.dllbaşvurarak tümleşik kimlik doğrulamasını (hangisinin kullanılabilir olduğuna bağlı olarak Kerberos veya NTLM kullanarak) belirtebiliyordu.
SQL Server için Microsoft JDBC Sürücüsü 4.0'dan başlayarak, bir uygulama saf Java Kerberos uygulamasını kullanarak Kerberos tümleşik kimlik doğrulamasını kullanarak bir veritabanına bağlanmak istediğini belirtmek için authenticationScheme connection özelliğini kullanabilir:
Krb5LoginModule kullanarak tümleşik kimlik doğrulaması istiyorsanız, yine de integratedSecurity=true connection özelliğini belirtmeniz gerekir. Daha sonra authenticationScheme=JavaKerberos bağlantı özelliğini de belirtirsiniz.
mssql-jdbc_auth-version-arch<><>.dllile tümleşik kimlik doğrulamasını kullanmaya devam etmek için integratedSecurity=true connection özelliğini (ve isteğe bağlı olarak authenticationScheme=NativeAuthentication) belirtmeniz yeterlidir.
authenticationScheme=JavaKerberos belirtir ancak integratedSecurity=true belirtmezseniz, sürücü authenticationScheme bağlantı özelliğini yoksayar ve bağlantı dizesinde kullanıcı adı ve parola kimlik bilgilerini bulmayı bekler.
Bağlantı oluşturmak için bir veri kaynağı kullanırken, setAuthenticationScheme kullanarak kimlik doğrulama şemasını program aracılığıyla ayarlayabilir ve (isteğe bağlı olarak) setServerSpn kullanarak Kerberos bağlantıları için SPN'yi ayarlayabilirsiniz.
Kerberos kimlik doğrulamasını desteklemek için yeni bir günlükçü eklenmiştir: com.microsoft.sqlserver.jdbc.internals.KerbAuthentication. Daha fazla bilgi için bkz. Sürücü işlemini izleme.
Aşağıdaki yönergeler Kerberos'u yapılandırmanıza yardımcı olacaktır:
- Windows için kayıt defterinde AllowTgtSessionKey'i 1 olarak ayarlayın. Daha fazla bilgi için bkz: Windows Server 2003'te Kerberos protokolü kayıt defteri girdileri ve KDC yapılandırma anahtarları.
- Kerberos yapılandırmasının (UNIX ortamlarında krb5.conf), ortamınız için doğru bölgeyi ve KDC'yi gösterdiğinden emin olun.
- Kinit kullanarak veya etki alanında oturum açarak TGT önbelleğini başlatın.
- authenticationScheme=JavaKerberos kullanan bir uygulama Windows Vista veya Windows 7 işletim sistemlerinde çalışıyorsa, standart bir kullanıcı hesabı kullanmanız gerekir. Ancak, uygulamayı bir yönetici hesabı altında çalıştırırsanız, uygulamanın yönetici ayrıcalıklarıyla çalışması gerekir.
Uyarı
serverSpn bağlantı özniteliği yalnızca Microsoft JDBC Sürücüleri 4.2 ve üzeri tarafından desteklenir.
Hizmet asıl adları
Hizmet asıl adı (SPN), istemcinin bir hizmetin örneğini benzersiz olarak tanımladığı addır.
serverSpn connection özelliğini kullanarak SPN'yi belirtebilir veya sürücünün sizin için derlemesine izin verebilirsiniz (varsayılan). Bu özellik şu biçimdedir: "MSSQLSvc/fqdn:port@REALM" burada fqdn tam etki alanı adı, bağlantı noktası bağlantı noktası numarası ve REALM büyük harflerle SQL Server'ın Kerberos bölgesidir. Kerberos yapılandırmanızın varsayılan bölgesi Sunucu ile aynı bölgeyse ve varsayılan olarak dahil edilmemişse, bu özelliğin bölge bölümü isteğe bağlıdır. Kerberos yapılandırmasındaki varsayılan bölgenin Sunucu'nun bölge değerinden farklı olduğu bölgeler arası kimlik doğrulama senaryosunu desteklemek istiyorsanız, SPN'yi serverSpn özelliğiyle ayarlamanız gerekir.
Örneğin, SPN'niz şöyle görünebilir: MSSQLSvc/some-server.zzz.corp.contoso.com:1433@ZZZZ.CORP.CONTOSO.COM
Hizmet asıl adları (SPN) hakkında daha fazla bilgi için bkz:
Uyarı
JDBC sürücüsünün 6.2 sürümünden önce, Cross Realm Kerberos'un düzgün kullanımı için serverSpn'yi açıkça ayarlamanız gerekir.
6.2 sürümünden itibaren, sürücü Cross Realm Kerberos kullanırken bile varsayılan olarak serverSpn'yi oluşturabilecektir. Her ne kadar serverSpn açıkça da kullanılabilir.
Oturum açma modülü yapılandırma dosyası oluşturma
İsteğe bağlı olarak bir Kerberos yapılandırma dosyası belirtebilirsiniz. Bir yapılandırma dosyası belirtilmezse, aşağıdaki ayarlar etkindir:
Güneş JVM
com.sun.security.auth.module.Krb5LoginModule gerekli useTicketCache=true;
IBM Ortak Girişimi (JVM)
com.ibm.security.auth.module.Krb5LoginModule gerekli useDefaultCcache = true;
Bir oturum açma modülü yapılandırma dosyası oluşturmaya karar verirseniz, dosya şu biçimde olmalıdır:
<name> {
<LoginModule> <flag> <LoginModule options>;
<optional_additional_LoginModules, flags_and_options>;
};
Oturum açma yapılandırma dosyası, her biri belirli bir uygulama veya uygulamalar için hangi temel kimlik doğrulama teknolojisinin kullanılması gerektiğini belirten bir veya daha fazla girişten oluşur. Örneğin
SQLJDBCDriver {
com.sun.security.auth.module.Krb5LoginModule required useTicketCache=true;
};
Her oturum açma modülü yapılandırma dosyası girişi, bir addan ve ardından bir veya daha fazla LoginModule'e özgü girişten oluşur. LoginModule'e özgü her girdi noktalı virgülle sonlandırılır ve LoginModule'e özgü girdilerin tamamı küme ayraçları içine alınır. Her yapılandırma dosyası girişi noktalı virgülle sonlandırılır.
Sürücü, oturum açma modülü yapılandırma dosyasında belirtilen ayarları kullanarak sürücünün Kerberos kimlik bilgilerini almasına izin vermenin yanı sıra mevcut kimlik bilgilerini de kullanabilir. Bu yöntem, uygulamanızın birden fazla kullanıcının kimlik bilgilerini kullanarak bağlantılar oluşturması gerektiğinde yararlı olabilir.
Sürücü, belirtilen oturum açma modülünü kullanarak oturum açmayı denemeden önce, varsa mevcut kimlik bilgilerini kullanmayı dener. Bu nedenle, belirli bir bağlam altında kod yürütme yöntemi kullanılırken Subject.doAs , çağrıya Subject.doAs geçirilen kimlik bilgileriyle bir bağlantı oluşturulur.
Daha fazla bilgi için bkz: JAAS Oturum Açma Yapılandırma Dosyası ve Krb5LoginModule Sınıfı.
Microsoft JDBC Sürücüsü 6.2'den başlayarak, oturum açma modülü yapılandırmasının giriş adı connection özelliği jaasConfigurationNamekullanılarak geçirilebilir. Bu yöntem, her bağlantının kendi oturum açma yapılandırmasına sahip olmasına veya SQLJDBCDriver.
Kerberos yapılandırma dosyası oluşturma
Kerberos yapılandırma dosyaları hakkında daha fazla bilgi için bkz: Kerberos Gereksinimleri.
Bu örnek, etki alanı adlarının bulunduğu YYYY bir ZZZZ etki alanı yapılandırma dosyasıdır.
[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
}
Etki alanı yapılandırma dosyasını ve oturum açma modülü yapılandırma dosyasını etkinleştirme
-Djava.security.krb5.conf ile bir etki alanı yapılandırma dosyasını etkinleştirebilirsiniz. Bir oturum açma modülü yapılandırma dosyasını -Djava.security.auth.login.configile etkinleştirebilirsiniz.
Örneğin, uygulamayı başlatmak için aşağıdaki komut kullanılabilir:
Java.exe -Djava.security.auth.login.config=SQLJDBCDriver.conf -Djava.security.krb5.conf=krb5.ini <APPLICATION_NAME>
SQL Server'a Kerberos aracılığıyla erişilebildiğini doğrulama
SQL Server Management Studio'da aşağıdaki sorguyu çalıştırın:
select auth_scheme from sys.dm_exec_connections where session_id=@@spid
Bu sorguyu çalıştırmak için gerekli izne sahip olduğunuzdan emin olun.
Kısıtlanmış temsilci
Microsoft JDBC Sürücüsü 6.2'den başlayarak, sürücü Kerberos Kısıtlanmış Temsili'ni destekler. Temsilci atanan kimlik bilgileri org.ietf.jgss.GSSCredential nesnesi olarak geçirilebilir, bu kimlik bilgileri sürücü tarafından bağlantı kurmak için kullanılır.
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);
Asıl adı, parolayı ve bölgeyi kullanan Kerberos bağlantısı
Microsoft JDBC Sürücüsü 6.2'den başlayarak, sürücü bağlantı dizesinde geçirilen Asıl Adı ve Parolayı kullanarak bir Kerberos bağlantısı kurabilir.
jdbc:sqlserver://servername=server_name;encrypt=true;integratedSecurity=true;authenticationScheme=JavaKerberos;userName=user@REALM;password=<password>
Kullanıcı krb5.conf dosyasında ayarlanan default_realm aitse, username özelliği bir REALM gerektirmez.
userName ve özelliği ile passwordintegratedSecurity=true; birlikte ayarlandığındaauthenticationScheme=JavaKerberos;, bağlantı, sağlanan parolayla birlikte Kerberos Sorumlusu olarak userName değeriyle kurulur.
Microsoft JDBC Sürücüsü 9.4'ten başlayarak, kullanıcı bağlantı dizesinde Kerberos kimlik doğrulaması için bölge belirtebilir.
jdbc:sqlserver://servername=server_name;encrypt=true;integratedSecurity=true;authenticationScheme=JavaKerberos;userName=user;password=<password>;realm=REALM
Aynı etki alanındaki Unix Makinelerinden Kerberos kimlik doğrulamasını kullanma
Bu kılavuz, çalışan bir Kerberos kurulumunun zaten var olduğunu varsayar. Yukarıda belirtilenlerin doğru olup olmadığını doğrulamak için çalışan Kerberos kimlik doğrulamasına sahip bir Windows makinesinde aşağıdaki kodu çalıştırın. Kod, başarılı olursa konsola "Kimlik Doğrulama Şeması: KERBEROS" yazdıracaktır. Sağlananların dışında başka çalışma zamanı bayrakları, bağımlılıklar veya sürücü ayarları gerekmez. Başarılı bağlantıları doğrulamak için aynı kod bloğu Linux üzerinde çalıştırılabilir.
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));
}
}
- İstemci makineyi sunucuyla aynı etki alanına etki alanına katın.
- (İsteğe bağlı) Varsayılan Kerberos bilet konumunu ayarlayın. Bu adım en uygun şekilde ortam değişkeni
KRB5CCNAMEayarlanarak yapılır. - Yeni bir tane oluşturarak veya mevcut bir bileti varsayılan Kerberos bilet konumuna yerleştirerek Kerberos biletini alın. Bir bilet oluşturmak için bir terminal kullanın ve bileti "USER" ve "DOMAIN" aracılığıyla
kinit USER@DOMAIN.ADbaşlatın. AD" sırasıyla asıl ve etki alanıdır. Örneğin:kinit SQL_SERVER_USER03@EXAMPLE.COM. Bilet, varsayılan bilet konumunda veyaKRB5CCNAMEayarlanmışsa yolda oluşturulacaktır. - Terminal bir şifre isteyecektir, şifreyi girin.
- Biletteki kimlik bilgilerini şu şekilde
klistdoğrulayın ve kimlik bilgilerinin kimlik doğrulaması için kullanmayı düşündüğünüz kimlik bilgileri olduğunu onaylayın. - Yukarıdaki örnek kodu çalıştırın ve Kerberos Kimlik Doğrulaması'nın başarılı olduğunu onaylayın.
Yerel platform GSS entegrasyonu
Yerel platform GSS entegrasyonu, Java uygulamalarının GSS-API'nin JDK uygulamasının şifreleme mekanizmaları yerine yerel GSS-API kullanmasına olanak tanır. Örneğin, aşağıdaki örnek kod, sürücü içinde yerel GSS-API kullanımının nasıl etkinleştirileceğini gösterir:
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));
}
}
Ayrıca, aşağıdaki JVM bağımsız değişkenleri de gereklidir:
-Dsun.security.jgss.native=true
-Djavax.security.auth.useSubjectCredsOnly=false
İsteğe bağlı olarak yerel GSS kitaplığına giden yolu da sağlayabilirsiniz.
-Dsun.security.jgss.lib=path/to/native/gss/library // This is optional
JVM bağımsız değişkenleri hakkında daha fazla bilgi için resmi Java belgelerine bakın.
Kerberos ile Genişletilmiş Koruma
JDBC sürücüsünü kullanırken Kerberos için Genişletilmiş Koruma'yı da etkinleştirebilirsiniz. Tek kısıtlama, JDBC sürücüsü için Genişletilmiş Koruma kullanılırken Zorla Şifreleme'nin etkinleştirilmemesi gerektiğidir.
Genişletilmiş Koruma'yı etkinleştirme hakkında daha fazla bilgi için bkz:
Şifreleme ile bağlanma hakkında daha fazla bilgi için bkz.: