software, software.db, software.java

JSP – MySQL Türkçe Karakter Probleminin Çözümü

JSP ile MySql kullanıyor ve Türkçe karakter sorunu yaşıyorsanız; aşağıdaki adımlarla bu sorunu çözebilirsiniz.

Veritabanında Schema, Table ve Column bazındaki tüm Collation’larınız “utf8 – utf8_unicode_ci” olmalıdır.

JSP sayfalarınızın tamamında aşağıdaki Tag’lerden biri yer almalıdır:

<%@page pageEncoding="UTF-8"%>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

Veritabanı bağlantısını sağlayacağınız zaman, Connection String’inize aşağıdaki gibi karakter setini dahil edin:

jdbc:mysql://localhost:3306/db_name?useUnicode=yes&characterEncoding=UTF-8

Son olarak; özellikle Request / Response ile aldığınız Text’leri SQL sorgusuna dahil etmeden önce aşağıdaki kod ile dönüşümden geçirin (Gelen metin: Input, SQL’e gidecek metin: output):

byte[] bytes = new byte[Input.length()];
for (int i = 0; i < Input.length(); i++) bytes[i] = (byte) Input.charAt(i);
String output = new String(bytes, "UTF-8");
Standard
software, software.db, software.sap

SAP Veritabanına Doğrudan Erişim

1464-ppt

Kerem Bey merhaba,

http://kk-dev.blogspot.com adresindeki yazılarınızı tesadüfen gördüm ve gerçekten işime yaradılar.

SAP konusunda bilgili olmanızdan dolayı bana yardımcı olabileceğinizi düşündüm ve maili o yüzden yazıyorum.

Özel bir proje çalışmam var ve SAP veritabanları üzerinde denemeler yapmam gerekiyor. HR, FI, CRM … ancak örnek veritabanı bulamıyorum. Ayrıca daha önce hiç çalışmadım.

Bilgisayarıma MAXDB kurdum. Yeterli olacak mı bilemiyorum.

Yapmak istediğim şey ABAP öğrenmek yada SAP içinde proje geliştirmek değil. SAP projelerinin veritabanları üzerine bir çalışma yapmak istiyorum. ASP.NET ile hazırlanan bir DB projesi var. Tabloları-kolonları ve veritabanına ait basit sorguları gösteren bir proje.

İhtiyacım olan şey örnek bir veritabanı üzerinde, tablo,kolon ve relation bilgilerini veritabanı üzerinden okumak ve verilerin nasıl ve ne şekilde yerleştiğini tespit etmek ve basit ama dinamik sorgular oluşturmak.

Umarım bana bu konuda yardım edebilirsiniz.

 

SAP üzerine yazılım geliştirmeye başlayan bir çok kişinin ilk aklına gelen şey, SAP’nin altında yatan veritabanına (Oracle, SQL Server, vs) doğrudan doğruya erişip raporlama yapmak veya uygulama geliştirmektir. Ancak, çok özel bazı durumlar haricinde, bu yöntem hiçbir zaman kullanılmamalıdır. Zira SAP R/3, modern veritabanları ile birlikte gelen güvenlik, Lock gibi katmanların üzerine pek çok ek katman koymaktadır. Bunları es geçip veritabanına doğrudan doğruya erişmenin birçok sakıncası olacaktır.

Biz kendi projelerimizde; .NET veya Java gibi platformlardan SAP verilerine erişmek istediğimizde genelde iki yöntem kullanıyoruz:

  • Eğer 4.x versiyonlu eski bir SAP sistemi söz konusu ise, .NET Connector veya Java Connector üzerinden SAP’de geliştirilmiş olan fonksiyonlara erişebilirsiniz. SAP üzerinde, dışarıdan erişmek isteyeceğiniz verileri okuyup Export eden fonksiyonlar yazdığınızda, bu fonksiyonları .NET veya Java ile çağırabilirsiniz.
  • Eğer 6.x versiyonlu yeni bir SAP sistemi söz konusu ise, aynı fonksiyonları Web Service olarak yayınlayabiliyoruz. Bu Web Service’leri .NET veya Java’dan çağırarak SAP’deki verileri SAP dışında kullanmak mümkündür.

SAP’ye dışarıdan kayıt atmak söz konusu olduğunda ise; veritabanına doğrudan doğruya kayıt atmak %99.9’luk ihtimalle sistem üzerinde tutarsızlıklara yol açacaktır. SAP en basit işlem kodlarında bile onlarca tabloya kayıt atmaktadır, bu kayıtları birebir taklit etmek mümkün değildir. Bunun yerine; yine SAP’nin standart BAPI fonksiyonlarını veya Batch Input ile kayıt atacak şekilde sonradan geliştirilmiş fonksiyonları yine yukarıdaki yöntemlerden biriyle çağırmak gerekir.

Gelelim esas sormuş olduğunuz soruya… Bilgisayara MAXDB kurmak yeterli olmayacaktır. SAP veritabanı ise tek başına kurulabilecek bir yazılım değildir, standart bir SAP kurulumunda hem veritabanı yüklemeleri (tablolar, View’lar, genel veriler, vs) yapılır hem de R/3 Application Server kurulur. Eğer benden SAP R/3’ün kendisini istediyseniz, bunu temin etmem pek mümkün değil. Zira SAP kurulum CD’leri lisans sözleşmesi karşılığı müşterilere SAP’nin kendisi tarafından gönderilir. Bu tarz bir kurulumu (temiz biri kurulum dahi GB’larca yer kaplamaktadır) kopyalayarak veya bir başka yöntemle çoğaltmak ise yasa dışı bir hareket olacaktır. SAP’nin Gold Partner’ı olan bir firmada yazılım geliştirme yöneticisi pozisyonunda bulunan birinden böyle bir talepte bulunmadığınızı varsayacağım 😉

Yukarıdaki teknik ve lisans uyarılarım çerçevesinde SAP üzerinde çalışmalar yapmak istiyorsanız, SAP kullanan tanıdık bir firmanın test sisteminde çalışmanızı öneririm.

 

 

Standard
software, software.db, software.security

Access Üzerinde 3DES


veritabanı mantığı adlı kitabınızı zaten uğraştığım access işinde yanlış yapmamak için okuyorum. Uygulama geliştirmek yerine tablo yapılarımda sorun varsa gidermek istiyorum. belki biz çoğu zaman bir iş biterken öğrendiğimiz son şey o işe nasıl başlamamız gerektiğidir.

her şey iyi güzel çok gerekli bir şey sunucu üzerindeki *.mdb dosyalarımızdaki bilgileri başkalarının okuması ya da offline iken okunması. açma parolasını nirsoft ‘un ücretsiz yazılımı bile mükemmel buluyor ücretsizce access 2003’e kadar.

çok laf kalabalığı oldu biliyorum. sizden ricam kitabınızda kullanıcı şifrelerini 3DES ile şifrelemişsiniz. Ben de bunu uygulamak istiyorum bu konuda access içine yazacağım kod, yardımcı araç ya da farklı şeyler neledrdir? hangi kaynaklara başvurmalıyım?

Öncelikle iki kavramı birbirinden ayırmakta fayda var. Sizin .mdb dosyasına koymuş olduğunuz şifre, Access içerisindeki tablolarda değil, .mdb dosyasının başlığında bir yerlerde Binary olarak saklanmaktadır. Bu, oluşturmuş olduğunuz veritabanı tablolarından ziyade Microsoft Office’in bir özelliğidir. Dosyaya koyduğunuz genel şifreyi programlama yaparak güçlendirmeniz, benim bilgim dahilinde mümkün değildir.

Benim kitapta bahsetmiş olduğum şifreleme, veritabanı tablolarında sakladığınız hassas verileri şifrelemektir. Örnek olarak User – Password değerlerinin tutulduğu bir tablo vermiş olmam, sanırım bu iki kavramın karışmasına yol açmış sizin tarafınızda. Örnekteki tablo .mdb dosyasına konan genel şifreyi saklayan tablo değildir – zaten öyle bir tablo da yok, dosyanın genel şifresi (az önce de belirttiğim gibi) tablolarda değil dosyanın içerisinde Binary olarak saklanır. Örnekteki User + Password, (örneğin) bir Web sitesinin üyelerine ait User + Password değerleri olabilir – yani Microsoft Office’in bir özelliği olmaktan ziyade, Access üzerinde geliştirmiş olduğunuz uygulamaya ait değerlerdir.

Aynı şekilde; veritabanı tablolarındaki kredi kartı numaralarının da şifrelenerek saklanması gerekir. Buna benzer diğer hassas bilgiler de şifrelenerek saklanmalıdır. Ama bunun, .mdb dosyasının genel şifresiyle bir ilgisi yoktur. .mdb dosyalarının genel olarak şifrelenmesi, sizin de işaret ettiğiniz gibi, Access 2007 itibariyle daha güçlü bir hale geldi. Access sürümünüzü yükselterek bu konudaki güvenliğinizi arttırabileceğinizi düşünüyorum – ama yine de Access 2007’yi kırabilen programların olup olmadığını bir araştırmakta fayda var.

Eğer kullanıcı bazlı erişim kontrolü (yani kim hangi tabloya erişebilir, kim okuyabilir, kim yazabilir) gibi bir ihtiyacınız varsa, Access yerine Microsoft SQL Server veya Oracle gibi daha kapsamlı bir RDBMS ürünü kullanmanızı tavsiye ederim. Bu ürünlerdeki erişim kısıtlama ve güvenlik özellikleri Access’e kıyasla çok daha güçlüdür. Access daha ziyade ufak tefek işlerde kullanmak üzere hazırlanmıştır. Microsoft SQL Server Express Edition’a bir göz atmanızı tavsiye ederim – bildiğim kadarıyla kişisel kullanım için ücretsiz; ama kurumsal amaçla kullanacaksanız lisans şartlarını bir okuyun, sonradan lisans ihlali yapmış olmanızı istemem. Yine kişisel kullanım için ücretsiz olan MySql’i de inceleyebilirsiniz; bu ürünü sadece 1-2 kez kullandığım için lisans şartlarını ve kullanıcı bazlı yetkilendirme konusundaki yeteneklerini tam bilmiyorum.

Bir access tablosu içerisindeki verilerin nasıl şifreleneceğine gelince… Uzun yıllardır SQL Server / Oracle / Lotus Notes dışında veritabanı kullanmamış olmamın yanı sıra, bugüne kadar Access’i sadece bir veri dosyası gibi kullandım, Access’in kendi geliştirme araçlarını kullanarak uygulama geliştirme ihtiyacım hiç olmadı. Yani; Access dosyasında tablolarım duruyor – işin uygulama kısmını ise .NET veya Java gibi ayrı bir platformda yapıyorum. Bu platformda geliştirdiğim uygulama, Access veritabanıyla sürekli etkileşim halinde olup gerekli yerlerde okuma / yazma işlemlerini yapıyor. Dolayısıyla, 3DES Encoding / Decoding işlemlerini de uygulamayı geliştirdiğim platform üzerinde hallediyorum. Yani veritabanı seviyesinde bu tarz bir işi hiç yapmadım. Bu durumda; tablolarınızdaki verileri şifrelemek istiyorsanız veri okuma / yazma kısmı için Java / .NET ile geliştirme yapmanızı tavsiye edeceğim. Access içerisinde böyle bir iş doğrudan yapılabilir mi diye merak ediyorsanız, bu sorunun cevabını bilmiyorum çünkü hiç denemedim. Eğer SQL Server, Oracle, MySql gibi bir ürün kullanmaya karar verirseniz; yine bu ürünlerin kendi şifreleme fonksiyonları olup olmadığını araştırabilirsiniz.

Ancak; güvenlik açısından, herhangi bir ürünü / algoritmayı olduğu gibi kullanmak pek tavsiye edilmez. Mesela bugüne kadar 3DES’i olduğu gibi kullandığımı hiç hatırlamıyorum. Genelde 3DES’i temel alıp, algoritmayı biraz değiştirerek (üzerine ek 1-2 işlev daha katarak) kullanıyorum. Böylece hem 3DES’in gücünden faydalanıyor, hem de 3DES’i kırmak üzere yazılmış standart programlara karşı nispeten güvende olduğumdan emin olabiliyorum. Bu mantıkla hobi anlamında geliştirmiş olduğum örnek bir algoritmayı http://www.codeplex.com/milkshake adresinde inceleyebilirsiniz, sanırım ne demek istediğimi daha net göreceksiniz. Bu tarz genişletmeler için yine Java / .NET tarzı bir platformda uygulama geliştirmeniz gerekecektir diye düşünüyorum.

Standard
software, software.db

CREATE DATABASE Permission Denied in Database ‘master’? Not Any More!

In Vista environment, when you run Microsoft SQL Server Management Studio Express and try to create a new database on your local instance (MACHINENAME\SQLEXPRESS), you might get the following error:

CREATE DATABASE permission denied in database ‘master’

The reason is; you are connecting to the database using Windows Authentication. If you start Management Studio Express the regular way, the program won’t have any Administrator privileges which are required to be able to create a new database.

You simply have to run Management Studio Express as administrator. Here is a step-by-step guide:

  • Close Management Studio Express
  • In the start menu, right-click the shortcut of Management Studio Express and select “Run As Administrator”
  • If Windows asks if you want to allow the program in admin mode, say “Yes”
  • Retry creating your database
  • Standard
    software, software.db, software.security

    Web Sitesindeki Veritabanı Nasıl Tespit Edilir

    Asp ile yazılan bir sayfada da SQL Injection tipi bir açık olma ihtimali var değil mi?

    Önemli olan kodun nasıl yazılmış oldugu sanırım?

    Ayrıca, login kısmı olan bir baska sitede, arkada mutlaka database kullanılmıştır diyebilir miyiz ?

    Kullanılıp kullanılmadıgını nasıl anlarız ? Kullanılmışsa, SQL veya Oracle olup olmadıgını anlama sansı var mı ?

    ASP, PHP, JSP; hangi teknoloji olursa olsun, veirtabanı kullanan ve QueryString’den aldığı değeri doğrudan doğruya sorguya dahil eden her Web sayfası SQL Injection’dan etkilenebilir. Önemli olan arkasındaki mimari.

    Login olan bir site %90 veritabanı kullanmıştır arkasında. %10’luk ihtimal; Hard Code girilmiş User değerleri veya XML, TXT gibi dosyalarda saklanan Login bilgileri olabilir. Ya da, bazı lokal intranetlerde Active Directory veya Domino Server tabanlı bir kontrol de olabilir; ama bu tarz kontrollere Internet ortamında bulacağın sitelerde rastlama ihtimali sıfıra yakın.

    Arkada çalışan veritabanı SQL Server mı Oracle mı (ya da MySql mi, PostGreSQL mi, Access mi, vs) anlamanın genel geçer bir yolu yok sanırım. SQL Injection ile zorlayıp çıkan hata iletilerinden tahmin yürütülebilir. Ya da, Hosting firmasının veritabanının IPsini biliyorsan, o IP’ye Oracle ve SQL Server portlarından (ezbere bilmiyorum) Telnet açmayı deneyebilirsin, Telnet açabildiğin portun veritabanını kullanıyordur. Daha basit bir yol; mesela SQL Server Manager ile o IP’ye bağlanmayı denersin, bağlanıp User sorduysa SQL Server’dır. Ama veritabanı IP’si, muhtemelen sitenin IP’sinden farklı olacaktır.

    Standard
    software, software.db

    Access`de Foreign Key

    kerem bey merhabalar

    kitabınızdan access çalışıyorum gerçekten de hiç bilmiyenler için sade ve
    zevk alınacak bir biçimde yazmışsınız. ama ben şunu anlayamıyorum:
    ilişkisel veri tabanı kurarken: siz şu ülke tablosunun ıd sini müşterinin
    id sine ülke_id ismiyle nasıl ekliyorsunuz. bayağı bir denedim beceremedim

    teşekkürler


    Ulke tablosunun ID`sini musteri tablosuna eklemek icin basit anlamda yapmaniz gereken ozel birsey yok. Musteri tablosunda INT tipinde ULKE_ID diye bir sutun yaratin, su asamada size yeter.

    Eger veritabani seviyesinde butunluk kontrolu saglayacak bir sekilde Foreign Key olarak yaratmak istiyorsaniz su adimlari izleyebilirsiniz:

  • ULKE tablosunu yaratin. ID alani anahtar olsun.
  • MUSTERI tablosunu yaratin. ID alani anahtar olsun.
  • MUSTERİ tablosuna ULKE_ID diye bir alan ekleyin. DATA TYPE kisminda `Lookup Wizard…` degerini secin ve acilacak olan sihirbazi takip edip ULKE tablosunun ID alanini secin.
  • Standard
    software, software.db

    İkili Ürün Listesi

    Merhaba Kerem Bey, Nasılsınız?

    Sizinle tanışmamız iş çıkışı sahflarda mysql kitabı almak için gitmemle başladı.Tesadüfe bakın ki; bana uzatılan değil rafların arasında içgücüsel bir arzu ile bakılıp, çekilen bir kitaptınız.Ve okudukça mysql`in veya veritabanı`nın raflara kitap dizmekten daha çok iş yaptığını 108 olan biri olarak hemen söyleyebilirim ki; bu sizin sayenizde. Ve ne tesadüftür ki; bugün doublekey.org baktım kapalı idi google.comdan önbellekten bakmaya çıkmışken sizin diğer sayfanız ulaştım.Dejavu Dejavu dediklei Fransızların bu olsa gerek.Söz fazla uzatmadan böyle bir kitap çıkardığınız için çok teşekkürler.

    Not:

    1. `Programlamacılık mantığı` almam için iyi bir referans bu kitap

    2. Çok renkli bir kişiğiniz var.Hem müzik hem programcılık sosyal olmak bu derim.

    3. Patron : 10 ürün var; İkili grup halinde alt alt dizmek istesek.Mysql ve php ile nasıl kodlanmalı (Not: birli grupta alt alt çekmek istediğimde çekiyorum.)

    İyi Çalışmalar

    Hoşçakalın.


    Merhaba…

    Kitap hakkindaki olumlu yorumlarin icin tesekkur ederim. Programcilik Mantigi`nin da ayni olcude faydali olmasini umarim =)

    Sorunun cevabina gelince… 10 tane urunu SQL ile alt alta cektikten sonra, PHP ile ikili sekilde formatlayarak gosterebilirsin. Bu isin nasil yapilacagini Pseudo Code ile yazmak gerekirse;

    write: <table>

    n = 0

    loop at data

    n = n + 1

    if n = 1 ise veya n/2`nin kalani 1 ise…

    write: <tr>

    endif

    write: <td>data</td>

    if n/2`nin kalani 0 ise…

    write: </tr>

    endif.

    endloop.

    write: </table>

    Umarim yardimci olabilmisimdir. Iyi calismalar…

    Standard