Arkadaşlar merhaba, ilk olarak offline ve online olarak forum da konu başlığı ile ilgili bir çok arama yaptım, artık son aşamaya geldiğim için konu açma ihtiyacı duydum, belkide sağlıklı arayamamamış olabilirim şimdiden kusuruma bakmayın.
Sorumu özetleyeyim. 200 kullanıcılı bir ağda server da çalışan sıkıntı ortaya çıkartmayan programım var. (Allah aşükür) verileri dadabas e atıyorum (sql server ve Firebird kullanıyorum) girilen veriler ile ilgili scanner da taranmış tif dosyaları ve aynı kayıtla alakalı birden fazla word belgesi hatta bazı kayıtlarda video (.mpeg) görüntüleri yer almaktadır. program kullanıcılar kendi arasında 3 aşamaya bölünüyor ve her bölümde kendi altında 4 ila 8 katagoride bölünüyorlar. amaç her bölüm farklı bölümün verilerine aynı veritabanında olsada ulaşmamaları ve bunuda yetkilendirme ile basip bir şekilde aşıyorum lakin Sıkıntı yaşadığım nokta klasör paylaşımı aşamasında yaşıyorum.
Veritabanı şişmesi için yukarıda saydığım döküman ve diğer belgeleri ağda (winows 2003 server) kalasörü paylaştırıyorum (databese de olmayan 12 GB lık bilgi mevcut) malesef klsöre paylaşımı everyone olarak veriyorum. Kalasöre yazma yetkisi olana yetki veriyorum ama programın açılması için en kötü everyone nin sadece oku özelliğini aktif etmem gerekiyor. klasöre paylaşım verdiğimde server a ağkomşularından bağlanan yetkisiz bir kullanıcının tüm bilgileri görmesi ve istediği yere kopyalaması anlamına geliyor. buda gizili bir beldenin alakasız kişilerin eline geçmesi demek oluyor.
Benim isteğim
windows 2003 server da sadece delphi de kodladığım programa yetki verebilmek ve programın bu klasöre ulaşabilmesi. Ağ komsularını kullanarak kalasörü açmaya çalışanların değil.
Uyguladığım kod aşağıda.
klasörü bağladım yer ana kayıt açılan tabel ın (int) id si, bu kod kayıt çağrılınca çalışan hali.
procedure TAna_Sayfa.DBEdit4Change(Sender: TObject);
var fPath:String;
begin
fpath := dm.yol_tbdokuman_yolu.Text + '\' + DBEdit4.Text; // yol ağ üzerinden değişen kalsa yönetici panelinden yeni yol verilmesi için ekledim
// 192.168.1.1\kalsöradı\ 'şeklinde de yazınca hatasız çalışıyor.
if not klasorKontrol(fPath) then
begin
ShellListView1.Root:=dm.yol_tbdokuman_yolu_bos.Text; // eğer klasör yok ise boş klasörü getiriyor.
end
else
begin
ShellListView1.Root:=fPath;
end;
if DBEdit4.Text ='' then
begin
ShellListView1.Root:=dm.yol_tbdokuman_yolu_bos.Text;
end;
end;
kayda ekleme yapılacak ise aşağıdaki kou kullanıyorum.,
procedure TAna_Sayfa.Button140Click(Sender: TObject);
var
FromF, ToF: file;
NumRead, NumWritten: Integer;
Buf: array[1..2048] of Char;
fnExt:String[4];
fPath:String;
begin
fPath:= dm.yol_tbdokuman_yolu.Text; // dosya yolu
if not klasorKontrol(fPath) then
begin
ShowMessage('Klasör Oluşturulamadı ...');
end
else
begin
if OpenDialog1.Execute then { Display Open dialog box }
begin
AssignFile(FromF, OpenDialog1.FileName);
Reset(FromF, 1); { Record size = 1 }
fnExt := ExtractFileExt(OpenDialog1.FileName);
if not klasorKontrol(fPath + '\' + DBEdit4.Text) then
begin
ShowMessage('Alt Klasör Oluşturulamadı ...');
end
else
begin
AssignFile(ToF, fPath + '\' + DBEdit4.Text + '\' +
ExtractFileName(OpenDialog1.FileName)); { Open output file }
Rewrite(ToF, 1); { Record size = 1 }
Canvas.TextOut(10, 10, 'Copying ' + IntToStr(FileSize(FromF))
+ ' bytes...');
repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
BlockWrite(ToF, Buf, NumRead, NumWritten);
until (NumRead = 0) or (NumWritten <> NumRead);
CloseFile(FromF); CloseFile(ToF);
ShellListView1.Refresh;
end;
end;
end;
ShellListView1.Root:= fPath + '\' + DBEdit4.Text + '\';
ShellListView1.Refresh;
end;
Proje açılırken path için gelecek değerler
procedure TAna_Sayfa.FormShow(Sender: TObject);
begin
ShellListView1.Root:=dm.yol_tbdokuman_yolu_bos.Text;
end;
allta olan kodlarda unit kısmına ekliyorum
kullanmak isteyen arkadaş var ise sorunsuz çalışıyor takıldığınız yer olursa dilimin döndüğü kadarıyla yardım ederim
function TAna_Sayfa.klasorKontrol(fpath: String): boolean;
begin
if(not DirectoryExists(fPath)) then
begin
CreateDir(fPath);
if(not DirectoryExists(fPath)) then
begin
Result := false;
end;
end;
Result := true;
end;
Klasör Paylaşımı ve Yetki
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- ayhandemirtas
- Üye
- Mesajlar: 114
- Kayıt: 01 Oca 2008 10:02
- Konum: Eskişehir
Re: Klasör Paylaşımı ve Yetki
Internette 70 GB lık FB veritabanları tutanlar olduğunu okumuştum. Bence 12 GB çok şişmiş değil.
diğer konuya gelince... kullanıcıları kendi pc lerinde isimleriyle sunucuda tanımla ve klasör yetkilerinide buna göre yap. diğerleri paylaşım olsada göremez
diğer konuya gelince... kullanıcıları kendi pc lerinde isimleriyle sunucuda tanımla ve klasör yetkilerinide buna göre yap. diğerleri paylaşım olsada göremez
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
- ayhandemirtas
- Üye
- Mesajlar: 114
- Kayıt: 01 Oca 2008 10:02
- Konum: Eskişehir
Re: Klasör Paylaşımı ve Yetki
Bu klasörü yetkilendirme tam çözüm olmuyor. Bilgi İşlem görevlisi arkadaşlar nekadar da işlerini ciddiye alsalar da kullanıcılar bukadar hasssa olamıyor. bilgisayarlar da bir oturumda hesap açılıyor ve günlerce o oturum açık kalıyor. Sadece yazdığım program kullanıcılar tarafından açılıp işleri bittikten sonrak kapatılıyor.
Bu sebepten dolayı malesef yetkilendirme işlemini tam yapamıyorum fakat. Aklımda bir çözüm ışıkları yandı. Server da dosyaları paylaştırmaktan ziyade bir .exe programı yaparak bu .exe porgramı klasörlere ulaşacak benişim yazdığım program da bu exe dosyasına ulaşarak iletişime girecek. server da çalışna programa parametre atanmadan giriş yapılmayacak. Bu şekilde olay çözmeyi düşünüyorum ama bakalım hangi yol ile yaparım deneme yanılma ile halletmeye çalışacağım. ilgi ve alakana teşekkrler.
Bu sebepten dolayı malesef yetkilendirme işlemini tam yapamıyorum fakat. Aklımda bir çözüm ışıkları yandı. Server da dosyaları paylaştırmaktan ziyade bir .exe programı yaparak bu .exe porgramı klasörlere ulaşacak benişim yazdığım program da bu exe dosyasına ulaşarak iletişime girecek. server da çalışna programa parametre atanmadan giriş yapılmayacak. Bu şekilde olay çözmeyi düşünüyorum ama bakalım hangi yol ile yaparım deneme yanılma ile halletmeye çalışacağım. ilgi ve alakana teşekkrler.
Re: Klasör Paylaşımı ve Yetki
Socketler üzerinden dosya paylaşımı yapabilirsin.
Aşagıdaki linklerin faydası olabilir.
http://delphi.about.com/od/networking/l/aa112602a.htm
http://www.delphi3000.com/articles/article_2313.asp?SK=
http://www.delphitricks.com/source-code ... ocket.html
Aşagıdaki linklerin faydası olabilir.
http://delphi.about.com/od/networking/l/aa112602a.htm
http://www.delphi3000.com/articles/article_2313.asp?SK=
http://www.delphitricks.com/source-code ... ocket.html
Re: Klasör Paylaşımı ve Yetki
merhaba
aşağıdaki komut bir ağ sürücüsüne bağlanmayı sağlıyor. Bu ve bunun gibi komutlar kullanarak bir süre bağlantıyı açıp sonra bağlantıyı kesebilirsiniz.
aşağıdaki komut bir ağ sürücüsüne bağlanmayı sağlıyor. Bu ve bunun gibi komutlar kullanarak bir süre bağlantıyı açıp sonra bağlantıyı kesebilirsiniz.
Kod: Tümünü seç
C:\WINDOWS\System32\NET.exe USE Z: \\192.168.0.11\paylasimadi parola /USER:DOMAINADI\kullaniciadi /persistent:no
- ayhandemirtas
- Üye
- Mesajlar: 114
- Kayıt: 01 Oca 2008 10:02
- Konum: Eskişehir
Re: Klasör Paylaşımı ve Yetki
sevgili emin_as ve akdatilla
arkadaşlar çözümleriniz ve ayırdığınız vakit için ayrı ayrı teşekkür ediyorum, gerçekten basit ve kullanışlı bir çözüm olarak gözüküyor, uygulamalar üzreinden farklı çalışmalar çıkartabilirim (İnşallah) geri kalan kısmını halletmeye çalışacağım, Umarım diğer kullanıcılara da güzel bir çözüm olur.
arkadaşlar çözümleriniz ve ayırdığınız vakit için ayrı ayrı teşekkür ediyorum, gerçekten basit ve kullanışlı bir çözüm olarak gözüküyor, uygulamalar üzreinden farklı çalışmalar çıkartabilirim (İnşallah) geri kalan kısmını halletmeye çalışacağım, Umarım diğer kullanıcılara da güzel bir çözüm olur.
Re: Klasör Paylaşımı ve Yetki
tekrar mehraba
bahsettiğim dos komutunu delphiden aşağıdaki gibi çağırabilirsiniz.
Delphideki WinExec komutu windows sistem komutlarındandır. Standart yeni form açıldığında windows uniti eklenmiş olarak açılır.
Eğer Windows uniti uses bloğunda yoksa eklenmelidir.
komutun açılımı:
"CMD /C " : İşletim sisteminin, herhangi bir komutu çalıştırılması için kullanılır.
"C:\WINDOWS\System32\NET.exe": Network ile ilgili birçok işlevi yerine getirmeyi sağlayan windows system programının path'ile birlikte adı. Eğer işletim sistemi farklı bir klasörde kurulu ise path bu farklı klasöre göre düzeltilmelidir.
Net.Exe programının parametreleri:
"USE": Ağ sürücüsüne bağlantı sağlamak için kullanılır.
"Z:": Ağ sürücüsü olarak hangi harfin kullanılacağını belirtir. Sürücüler A ile Z arasında ki ingilizce alfabesindeki harfler arasından seçilebilir.
Ancak daha önce kullanılmış bir sürücü adı seçilmemelidir.
" \\192.168.0.11\paylasimadi": Ana makinanın adresi ile ana makinadaki paylaşılan klasörün adı bitişik olarak yazılır. Bu bilgideki 192.168.0.11 ifadesi ana makinanın ip numarasını, paylasimadi ifadeside paylaşılan klasörün adını belirtiyor. "\", işletim sisteminde ağ yolunu ve klasörleri göstermek için kullanılan ayırıcı karakterdir.
"parola": Eğer ana makinaya bir kullanıcı adı ve şifre ile bağlanılacaksa paylaşım adından hemen sonra şifre bilgisi yazılır. Eğer şifre yoksa yazılmaz.
"/USER:DOMAINADI\kullaniciadi": Ana makinaya kullanıcı adı ile bağlanmak için kullanılır. Bu parametrenin açılımı
"/USER:": Sabit
"DOMAINADI\": Ana makinaya bir domain name ile bağlanılacaksa domain adı yazılır.
"kullanıcıadı": Ana makinaya bağlanırken kullanılacak yetkili kullanıcı adı.
" /persistent:no": Bu parametre bilgisayar kapatılıp açıldığında ağ sürücüsüne tekrar bağlantı kurulmasını engeller (Otomatik bağlantıyı iptal eder).
Bunun dışında bana gönderdiğiniz mesajda dikkatimi çeken en önemli hata: şifre yazdığınız yere paylaşım adının girilmesi gerekirdi.
Bir sorun olursa tekrar yardımcı olmaya çalışırım.
Kolay gelsin
bahsettiğim dos komutunu delphiden aşağıdaki gibi çağırabilirsiniz.
Kod: Tümünü seç
WinExec(PChar('CMD /C C:\WINDOWS\System32\NET.exe USE Z: \\192.168.0.11\paylasimadi parola /USER:DOMAINADI\kullaniciadi /persistent:no
'),sw_hide);
Eğer Windows uniti uses bloğunda yoksa eklenmelidir.
komutun açılımı:
"CMD /C " : İşletim sisteminin, herhangi bir komutu çalıştırılması için kullanılır.
"C:\WINDOWS\System32\NET.exe": Network ile ilgili birçok işlevi yerine getirmeyi sağlayan windows system programının path'ile birlikte adı. Eğer işletim sistemi farklı bir klasörde kurulu ise path bu farklı klasöre göre düzeltilmelidir.
Net.Exe programının parametreleri:
"USE": Ağ sürücüsüne bağlantı sağlamak için kullanılır.
"Z:": Ağ sürücüsü olarak hangi harfin kullanılacağını belirtir. Sürücüler A ile Z arasında ki ingilizce alfabesindeki harfler arasından seçilebilir.
Ancak daha önce kullanılmış bir sürücü adı seçilmemelidir.
" \\192.168.0.11\paylasimadi": Ana makinanın adresi ile ana makinadaki paylaşılan klasörün adı bitişik olarak yazılır. Bu bilgideki 192.168.0.11 ifadesi ana makinanın ip numarasını, paylasimadi ifadeside paylaşılan klasörün adını belirtiyor. "\", işletim sisteminde ağ yolunu ve klasörleri göstermek için kullanılan ayırıcı karakterdir.
"parola": Eğer ana makinaya bir kullanıcı adı ve şifre ile bağlanılacaksa paylaşım adından hemen sonra şifre bilgisi yazılır. Eğer şifre yoksa yazılmaz.
"/USER:DOMAINADI\kullaniciadi": Ana makinaya kullanıcı adı ile bağlanmak için kullanılır. Bu parametrenin açılımı
"/USER:": Sabit
"DOMAINADI\": Ana makinaya bir domain name ile bağlanılacaksa domain adı yazılır.
"kullanıcıadı": Ana makinaya bağlanırken kullanılacak yetkili kullanıcı adı.
" /persistent:no": Bu parametre bilgisayar kapatılıp açıldığında ağ sürücüsüne tekrar bağlantı kurulmasını engeller (Otomatik bağlantıyı iptal eder).
Bunun dışında bana gönderdiğiniz mesajda dikkatimi çeken en önemli hata: şifre yazdığınız yere paylaşım adının girilmesi gerekirdi.
Bir sorun olursa tekrar yardımcı olmaya çalışırım.
Kolay gelsin