|
Welcome,
Guest
|
|
Belirli bir işlemi kimin, ne zaman ve nasıl yaptığı, veri güvenliğinin sağlanmasına yönelik birçok düzenlemenin sorguladığı en temel bilgi olarak karşımıza çıkmaktadır. Bu bilgiye ulaşmak için hem uygulama hem de veri tabanı katmanında farklı yöntemler uygulanmaktadır. Oracle Veri Tabanı'nda “Kim ne zaman ne yaptı?” sorusuna cevap almanın en güvenli yolu veri tabanında sunulan audit mekanizmasının kullanılmasıdır. Veri tabanı katmanında sunulan bu özellik sayesinde veri tabanındaki tüm işlemler için denetim verisi oluşturulabilmekte ve bu veriler isteğe göre veri tabanı veya işletim sistemine yazılabilmektedir.
Oracle Veri Tabanı tarafından oluşturulan denetim verilerinde bulunan en önemli bilgi hiç şüphesiz “Kim?” sorusunun cevabıdır. Denetim verilerinin veri tabanına yazıldığı durumda kullanılan AUD$ tablosunun yapısı şu şekildedir: SQL> desc AUD$ Name Null? Type SESSIONID NOT NULL NUMBER ENTRYID NOT NULL NUMBER STATEMENT NOT NULL NUMBER TIMESTAMP# DATE USERID VARCHAR2(30) USERHOST VARCHAR2(128) TERMINAL VARCHAR2(255) ACTION# NOT NULL NUMBER RETURNCODE NOT NULL NUMBER OBJ$CREATOR VARCHAR2(30) OBJ$NAME VARCHAR2(128) AUTH$PRIVILEGES VARCHAR2(16) AUTH$GRANTEE VARCHAR2(30) NEW$OWNER VARCHAR2(30) NEW$NAME VARCHAR2(128) SES$ACTIONS VARCHAR2(19) SES$TID NUMBER LOGOFF$LREAD NUMBER LOGOFF$PREAD NUMBER LOGOFF$LWRITE NUMBER LOGOFF$DEAD NUMBER LOGOFF$TIME DATE COMMENT$TEXT VARCHAR2(4000) CLIENTID VARCHAR2(64) SPARE1 VARCHAR2(255) SPARE2 NUMBER OBJ$LABEL RAW(255) SES$LABEL RAW(255) PRIV$USED NUMBER SESSIONCPU NUMBER NTIMESTAMP# TIMESTAMP(6) PROXY$SID NUMBER USER$GUID VARCHAR2(32) INSTANCE# NUMBER PROCESS# VARCHAR2(16) XID RAW( AUDITID VARCHAR2(64) SCN NUMBER DBID NUMBER SQLBIND CLOB SQLTEXT CLOB OBJ$EDITION VARCHAR2(30) Burada yer alan USERID kolonu veri tabanında yapılan işlemi gerçekleştiren kullanıcı bilgisini saklamaktadır ve bu kullanıcı veri tabanı katmanında tanımlı olan şema kullanıcısıdır. Bu durum veri tabanı bağlantılarında ortak bir şema kullanıcısı kullanılan uygulamalarda önemli bir soruna yol açmaktadır. Veri tabanı üzerindeki tüm işlemler aynı kullanıcı tarafından yapılmış gibi görünmekte ve uygulama katmanındaki gerçek kullanıcı bilgisine ulaşılamamaktadır. Bu da veri tabanı tarafından oluşturulan denetim verilerinin “Kim?” sorusuna cevap verememesine neden olmaktadır. Kullanıcı Kimliğinin Veri Tabanı Katmanına Taşınması Oracle Veri Tabanı'nda sunulan Kurumsal Kullanıcı Güvenliği (Enterprise User Security – EUS) özelliği veri tabanı kimlik doğrulama işleminin bir dizin sunucusu üzerinde gerçekleştirilerek kullanıcı kimlik bilgisinin veri tabanı katmanına taşınmasını sağlamaktadır. EUS özelliğinin devreye alınması durumunda oluşan en basit mimari şu şekildedir: bir.png Şeki-1 Bu mimaride uygulama kullanıcılarının kimlik bilgileri dizin sunucusu üzerinde saklanacak ve veri tabanına bağlantı sırasında da veri tabanı şema kullanıcısı yerine bu kimlik bilgisi kullanılacaktır. Basit bir senaryo üzerinde inceleyecek olursak: EUS devreye alınmadan önce: Uygulama Kullanıcısı: APPUSER Uygulama Kullanıcı Şifresi: APPUSERPWD Veri Tabanı Şeması: DBUSER Veri Tabanı Şema Şifresi: DBUSERPWD Bu senaryoda kullanıcı adı ve şifre gibi bilgiler bir veri tabanı tablosunda veya farklı bir kaynakta saklanmakta ve uygulama kullanıcısı kim olursa olsun tüm veri tabanı bağlantıları DBUSER ile yapılmaktadır. iki.png Şekil-2 Uygulama kullanıcısı kullanıcı adı ve şifre bilgilerini (APPUSER/APPUSERPWD) girdikten sonra uygulama veri tabanı bağlantısını DBUSER ile kurarak kullanıcı tablosunda kimlik doğrulama işlemini gerçekleştirmektedir. Böyle bir senaryoda Oracle audit mekanizmasının kullanılması durumunda yapılan işlemler DBUSER tarafından gerçekleştirilmiş olarak görülecektir. Bu da yazının başında bahsettiğimiz “Kim?” sorusuna cevap alamama sorununa yol açacaktır. EUS devreye alındıktan sonra: Uygulama Kullanıcısı: APPUSER Uygulama Kullanıcı Şifresi: APPUSERPWD Veri Tabanı Şeması: DBUSER Veri Tabanı Şema Şifresi: <GLOBAL> => EUS paylaşılan şema knfigürasyonu için EUS Kullanıcı Eşleştirme: APPUSER => DBUSER Bu senaryoda veri tabanı kullanıcısı DBUSER için şifre olarak özel bir değer olan GLOBAL bilgisi tutulmakta ve EUS konfigürasyonunda APPUSER kullanıcısı veri tabanındaki DBUSER kullanıcısına ilişkilendirilmektedir. Böylece uygulama kullanıcısının veri tabanına hangi şema ile bağlanacağı belirlenmektedir. uc.png Şekil-3 Uygulama kullanıcısı kullanıcı adı ve şifre bilgilerini (APPUSER/APPUSERPWD) girdikten sonra uygulama veri tabanı bağlantısı için bu bilgileri kullanacak ve veri tabanı bu bilgilerin doğrulanması için dizin sunucusunda gerekli sorgulamayı gerçekleştirecektir. Veri tabanı kimlik doğrulama işleminin başarılı olması durumunda yine dizin sunucusunda tutulan kullanıcı – şema ilişkilendirme bilgisini kullanarak bağlantının hangi şemaya yapılacağını belirleyerek gerekli bağlantı kurulmaktadır. Bu işlem sırasında dizin sunucusu ile veri tabanı arasındaki iletişim tamamen veri tabanı tarafında gerçekleştirilmekte olup herhangi bir kodlama gerektirmemektedir. Bu senaryoda iki önemli özellik sunulmaktadır. Bunlardan ilki uygulama ve veri tabanı için kimlik doğrulama işleminin dizin sunucusu üzerinde gerçekleştirilmesidir. Bu şekilde kurumsal kullanıcıların ve kurumsal rollerin merkezi olarak yönetilebilmesi ve farklı veri tabanları için ortak kullanıcı ve rol bilgilerinin kullanılabilmesi sağlanmaktadır. İkinci ve daha önemli olan özellik ise EUS ile birlikte kullanıcı kimlik bilgisinin veri tabanı katmanına otomatik olarak taşınabilmesi ve bu bilginin denetim verilerinde (Oracle audit logları) görülebilir olmasıdır. Bu sayede artık veri tabanında yapılan işlemler için “Kim?” sorusuna cevap vermek mümkün olmaktadır. Connection Pool Kullanımı ve Proxy Kullanıcı EUS kullanımında karşımıza çıkabilecek önemli kısıtlardan biri uygulama sunucusunda veri tabanı bağlantıları için connection pool kullanılması durumudur. Connection pool kullanımı tüm bağlantıların aynı veri tabanı kullanıcısı ile açılması esasına dayanmakta ancak EUS tüm uygulama kullanıcılarının veri tabanı bağlantılarını kendi kullanıcı adı ve şifre bilgileriyle açmalarını gerektirmektedir. Proxy kullanıcı kavramı bu sorunun çözümünü sağlayan ve Oracle veri tabanında sunulan bir kimlik doğrulama yöntemidir. Proxy kullanıcı yöntemiyle veri tabanı bağlantıları connection pool'da kullanılmak üzere ortak bir kullanıcı ile açılabilmekte ve uygulama kullanıcıları da bu hazır bağlantı üzerinden kendi Oracle session'larını yaratabilmektedir. Böylece connection pool kullanılan durumlarda da EUS özelliğinden yararlanmak mümkün olmaktadır. Örnek bir senaryoda inceleyecek olursak connection pool, EUS ve proxy kullanıcı yöntemlerinin kullanıldığı mimari şu şekilde olacaktır: Uygulama Kullanıcısı: APPUSER Uygulama Kullanıcı Şifresi: APPUSERPWD Veri Tabanı Şeması: DBUSER Veri Tabanı Şema Şifresi: <GLOBAL> => EUS paylaşılan şema konfigürasyonu için EUS Kullanıcı Eşleştirme: APPUSER => DBUSER Proxy Kullanıcı: PROXYUSER Proxy Kullanıcı Şifresi: PROXYUSERPWD dort.png Şekil-4 Bu senaryoda kullanıcılar kullanıcı adı ve şifre bilgilerini (APPUSER/APPUSERPWD) girdikten sonra uygulama veri tabanı bağlantısı için connection pool'da bulunan hazır bağlantıları (PROXYUSER ile açılmış bağlantılar) alacak ve bu bağlantılar üzerinde kullanıcının girdiği kullanıcı adı ve şifre ile (APPUSER/APPUSERPWD) bir Oracle session'ı yaratacaktır. Böylelikle hem connection pool hem de EUS özellikleri birlikte kullanılabilecektir. Bu şekilde kurulan bağlantılarda hem proxy kullanıcı bilgisi hem de kurumsal kullanıcı (dizin sunucusunda tanımlı uygulama kullanıcısı) bilgisi veri tabanı katmanına taşınabilmekte ve denetim verilerinde kullanıcı kimlik bilgisini görmek mümkün olmaktadır. Bu senaryoyu sağlamak için veri tabanı üzerinde: SQL> create user proxyuser identified by proxyuserpwd; SQL> grant create session to proxyuser; SQL> alter user dbuser grant connect through proxyuser authentication required; komutlarını çalıştırarak proxy kullanıcı ayarları yapılmalıdır. (APPUSER ve DBUSER kullanıcıları arasındaki EUS kullanıcı eşleştirme işlemleri daha önceki adımlarda yapılmış olmalıdır.) Bu işlemlerin ardından aşağıdaki örnek Java kodu kullanılarak Enterprise Identity bilgisinin veri tabanı katmanında nasıl tutulduğunu görebilirsiniz: import java.sql.*; import java.io.*; import java.util.Properties; import oracle.jdbc.*; class ProxyTest { public static void main (String args[]) throws SQLException { try { DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@dbhost:1521:dbsid","proxyuser","proxyuserpwd"); Properties props = new Properties(); props.put(OracleConnection.PROXY_USER_NAME, "appuser/appuserpwd"); ((OracleConnection)conn).openProxySession(OracleConnection.PROXYTYPE_USER_NAME,props); DataInputStream dis = new DataInputStream(System.in); System.out.println("Proxy Session for user appuser established. Press Enter to Continue !"); try { int answer = dis.read(); }catch(IOException ioe){ ioe.printStackTrace(); } Statement stmt = conn.createStatement(); String sql = "select sys_context('USERENV','ENTERPRISE_IDENTITY') from dual"; ResultSet rSet = stmt.executeQuery(sql); while(rSet.next()) System.out.println("Logged in with Enterprise User: " + rSet.getString(1)); rSet.close(); stmt.close(); ((OracleConnection)conn).close(OracleConnection.PROXY_SESSION); System.out.println("Proxy Session for user appuser closed. Press Enter to Continue !"); try { int answer = dis.read(); }catch(IOException ioe){ ioe.printStackTrace(); } conn.close(); } catch(SQLException e) { e.printStackTrace(); } } } EUS özelliğinnden yararlanabilmek için çeşitli dizin sunucuları kullanılabilmektedir. Oracle Internet Directory, EUS için gerekli ağaç yapısını sunması nedeniyle Oracle veri tabanı ile entegre olabilmekte ve doğrudan kullanılabilmektedir. Microsoft Active Directory, Sun Java System Directory ve Novell eDirectory dizin sunucularının tercih edilmesi durumunda Oracle veri tabanının bu dizin sunucularıyla entegre olabilmesi için aracı bir servise gerek duyulmaktadır. Oracle Virtual Directory, bu dizin sunucuları ile Oracle veri tabanı arasındaki EUS konfigürasyonunun yapılabilmesini sağlamaktadır. Özetle, EUS veri tabanı denetim verilerinde karşımıza çıkan en önemli sorunu çözmemizi sağlamakta ve veri tabanı işlemleri için “Kim?” sorusuna en doğru cevabı güvenilir bir şekilde sunmaktadır. Bu özelliğin kullanımıyla birlikte kullanıcı ve yönetiminin merkezileştirilmesi ve Oracle veri tabanı ile birlikte kullanacağımız güvenlik ürünlerinde de kişi bazlı tanımlamalar yapılabilmesi sağlanmaktadır. |
|
|
Please Log in or Create an account to join the conversation. |
