全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:7214
推到 Plurk!
推到 Facebook!

如何變換身分取得開檔授權

尚未結案
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-09 09:44:34 IP:61.221.xxx.xxx 未訂閱
小弟公司在某個UNC path存放公司的相關文件,一般人不能知道檔案的路徑存放位置,但是可以透由ERP中開啟此檔,小弟想要OS建立一個共用的帳號,此帳號被用來當user透由ERP的時候,用此帳號身分來開啟此檔,請各位大大指導一下。
------
ivankuo
japhenchen
高階會員


發表:51
回覆:444
積分:184
註冊:2003-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-09 12:34:17 IP:211.96.xxx.xxx 未訂閱
我的方法如下 1、使用隱藏共享$符號(像IPC$),就可以把這個共享給藏起來,不被網芳瀏覽到 2、用SQL BLOB欄位存放(可以存到2G)...程式要用時再用STREAM抓下即可    寫入BLOB的方法如下
procedure TForm1.Button1Click(Sender: TObject);
var fstrm : TFileStream;
    BS : TBlobStream;
begin
   with ADOQuery1 do begin  // 隨你喜歡,看是要用ADO還是BDE,只要能支持BLOB欄位格式的Database都可以
      SQL.Clear;
      SQL.Add('SELECT A,B,C FROM DATAX WHERE A=1');  // 我亂掰的,自己依需求修改一下
      EXECSQL;
      OPEN;
      fstrm:=TFileStream.Create('C:\AUTOEXEC.BAT',fmOpenRead OR fmShareDenyWrite);
      fstrm.Seek(soFromBeginning,0);
      if fstrm.size>0 then begin
         if recordcount=0 then  // SELECT 得到記錄就修改該筆記錄,找不到就新增一筆
            APPEND
         else 
            edit;
         BS:=TBlobStream(CREATEBLOBSTREAM(FIELDBYNAME('C'),bmWrite));  // C欄位是BLOB格式,用IMAGE可以支援到2G,用多少才佔多少實体空間
         BS.CopyFrom(fstrm,0);
         BS.Free;     // 啥感覺都沒就寫入了到SQL了...當然,有安全顧慮的系統,要自己修改一下
         post;
      end
      else showmessage('無法加入其他文件夾的資料');
      freeandnil(fstrm);
      CLOSE;
   END;
end;
從SQL讀回來的方法
   fstrm:=TFileStream.Create('C:\AUTOEXEC.BAK',fmCreate); // 故意寫成BAK的,免得寫壞了害你不能開機
   fstrm.CopyFrom(CREATEBLOBSTREAM(FIELDBYNAME('C'),bmRead),0);
   freeandnil(fstrm);    
還有很多其他更好的方法...不過我學藝不精,不知道其他大大能否指教 我不懂,不懂,不懂....所以我才來ktop學工夫
japhenchen
高階會員


發表:51
回覆:444
積分:184
註冊:2003-07-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-09 13:03:24 IP:211.96.xxx.xxx 未訂閱
不過我回答的可能不對題目,如果是要在WINDOWS里變換身份連線某個網路磁碟機,是可以,不過只限於WINDOWS NT/2000/XP/2003.......98是不可以改變帳號,但可以用不同密碼連線別的UNC成自己的LOCAL DRIVER~    簡單說,我用ABC這個帳號登入98系統,可以用密碼123連到\\NAS1\SHAREx,另外可以用密碼456連到\\NAS2\SHAREx,看你要用dos的net的指令來做也好,還是以下範例也好    NT/2000/XP/2003以上系統才可以使用跟登入時不同的帳號來連線網路資源.....    
    procedure Netuse(Drv,Server,NetDisk,username,pwd:string);
var lpNETRESOURCE: TNETRESOURCE;
    ERRORRESP : INTEGER ;
    xr : longint;
    result: string;
begin
   if (Drv='') OR (Server='') OR (NetDisk='')THEN EXIT ;
   lpNETRESOURCE.dwScope     :=RESOURCE_REMEMBERED OR RESOURCE_CONNECTED;
   lpNETRESOURCE.dwType      :=RESOURCETYPE_DISK ;
   lpNETRESOURCE.lpLocalname :=pchar(Drv);
   lpNETRESOURCE.lpRemotename:=pchar('\\' server '\' NetDisk);
   lpNETRESOURCE.lpProvider  :=nil;
   SetLastError(0);
   WNETADDConnection2( lpNETRESOURCE,PCHAR(pwd),PCHAR(username),CONNECT_UPDATE_PROFILE);
   xr:=GetLastError;
   case xr of
      NO_ERROR: Result := '連線完成';
      ERROR_ALREADY_ASSIGNED: Result := '本地磁碟機字元已經被指定 ';
      ERROR_ACCESS_DENIED: Result := '存取網路資源被拒';
      ERROR_BAD_DEV_TYPE: Result := '本地設備形態與網路資源不符合';
      ERROR_BAD_DEVICE: Result := '本地磁碟機字元無效';
      ERROR_BAD_NET_NAME: Result := '網路資源名稱無效';
      ERROR_BAD_PROFILE: Result := '使用者資料檔為無效格式';
      ERROR_BAD_PROVIDER: Result := '找不到相符指定的網路提供者';
      ERROR_BUSY: Result := '網路忙碌中';
      ERROR_CANCELLED: Result := '使用者取消網路連線';
      ERROR_CANNOT_OPEN_PROFILE: Result := '系統無法開啟使用者資料檔進行權限核對';
      ERROR_DEVICE_ALREADY_REMEMBERED: Result := '網路資源已經連線';
      ERROR_EXTENDED_ERROR:Result := '網路發生錯誤';
      ERROR_INVALID_PASSWORD: Result:='密碼無效';
      ERROR_NO_NET_OR_BAD_PATH: Result := '網路元件未啟動';
      ERROR_NO_NETWORK: Result := '網路不存在';
   end;
   if xr<>NO_ERROR then begin
      SetLastError(0);
      WNETCancelConnection( pchar(DRV),true);
   end;    end;    procedure TForm1.Button1Click(Sender:TObject);
begin
   netuse('K:','NAS1','SHAREx$','abc','123')   ;  // 用帳號abc,密碼123,連接網路磁碟機K:到 \\NAS1\SHAREx$
   netuse('L:','NAS2','SHAREx$','abc','456')   ;  // 用帳號abc,密碼456,連接網路磁碟機L:到 \\NAS2\SHAREx$
   netuse('LPT1','NAS3','HPLASER','abc','789') ;  // 用帳號abc,密碼789,連接本地印表機連接埠LPT1到 \\NAS3\HPLASER
   // 以上範例跟DOS下net use的結果相同~~!!
end;    procedure TForm1.Button2Click(Sender:TObject);
begin
   WNETCancelConnection( pchar('K:'),true);   // 中斷連接K:
   WNETCancelConnection( pchar('L:'),true);   // 中斷連接L:
   WNETCancelConnection( pchar('LPT1'),true);   // 中斷連接LPT1
end;
我不懂,不懂,不懂....所以我才來ktop學工夫
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-10-09 15:02:17 IP:61.221.xxx.xxx 未訂閱
前輩 unc path 也要指定一個網路磁碟機嗎??
------
ivankuo
japhenchen
高階會員


發表:51
回覆:444
積分:184
註冊:2003-07-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-10-09 15:48:08 IP:211.96.xxx.xxx 未訂閱
不用~如果不連網路磁碟機的話,磁碟機代號留空白,連到ipc$也行,這樣之後就可以直接開啟你想要的檔案 ex: assignfile(xfile,'\\NAS1\SHAREx\a\b.txt'); ...... 我不懂,不懂,不懂....所以我才來ktop學工夫
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-10-09 16:33:59 IP:61.221.xxx.xxx 未訂閱
不好意思~~ 小弟按照您的方式去做,發覺xr:=GetLastError傳回的值是1219不在所列的範圍內,然我我在用net use 去看,並沒有連線成功。 我的unc path 結構如下 我有\\A權限(\\A底下有很多資料夾) 但我沒有\\A\A-1 的權限, 用另一個有\\A\A-1 的權限帳號去連此資料夾 您的UNC path 中最後加上一個$ 是什麼意思?? 我的環境是win 2003
------
ivankuo
japhenchen
高階會員


發表:51
回覆:444
積分:184
註冊:2003-07-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-10-09 16:57:09 IP:211.96.xxx.xxx 未訂閱
    ipc$連接失敗的原因 以下5個原因是比較常見的: 1)你的系統不是NT或以上操作系統; 2)對方沒有打開ipc$默認共享 3)對方未開啟139或445端口(惑被防火牆屏蔽) 4)你的命令輸入有誤(比如缺少了空格等) 5)用戶名或密碼錯誤(空連接當然無所謂了) 另外,你也可以根據返回的錯誤號分析原因:  錯誤號5,拒絕訪問 : 很可能你使用的用戶不是管理員權限的,先提升權限;  錯誤號51,Windows 無法找到網絡路徑 : 網絡有問題;  錯誤號53,找不到網絡路徑 : ip地址錯誤;目標未開機;目標lanmanserver服務未啟動;目標有防火牆(端口過濾);  錯誤號67,找不到網絡名 : 你的lanmanworkstation服務未啟動;目標刪除了ipc$;  錯誤號1219,提供的憑據與已存在的憑據集衝突 : 你已經和對方建立了一個ipc$,請刪除再連。 錯誤號1326,未知的用戶名或錯誤密碼 : 原因很明顯了; 錯誤號1792,試圖登錄,但是網絡登錄服務沒有啟動 : 目標NetLogon服務未啟動。(連接域控會出現此情況) 錯誤號2242,此用戶的密碼已經過期 : 目標有帳號策略,強制定期要求更改密碼。 我不懂,不懂,不懂....所以我才來ktop學工夫
japhenchen
高階會員


發表:51
回覆:444
積分:184
註冊:2003-07-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-10-09 17:05:25 IP:211.96.xxx.xxx 未訂閱
答案不就出來了,你有\\A的權限,代表你可能早已經跟A主機連上了,那如果你還想跟他用另外的權限連其他的資料夾,不使用連線網路磁碟機的話,只有用IPC$的份,但如果你還同時想用已連接進來的資料夾,那建議你還是用網路磁碟機連接的方便.... 1219 錯誤碼就是你已經有一個IPC$連結正在使用中,如果想用另外的權限使用該IPC$,請先中斷先前的連接~~ 不過有個矛盾點~我懶的測,既然網路磁碟機也是用IPC$管道,那同一主機下的不同資料夾使用不同權限,可以多個不同權限IPC$共存嗎?我等下去玩玩看~~~ 我不懂,不懂,不懂....所以我才來ktop學工夫
japhenchen
高階會員


發表:51
回覆:444
積分:184
註冊:2003-07-23

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-10-09 17:16:21 IP:211.96.xxx.xxx 未訂閱
C:\>net use S: \\A\abc /USER:ABC pass123 命令執行成功。 C:\>net use T: \\A\def /USER:DEF pass456 系統發生 1219 錯誤。 不允許使用多於一個使用者名稱的相同使用者有多個連線到一個伺服器或共用資源。中斷所有之前到伺服器或共用資源的連線,然後再試。 我不懂,不懂,不懂....所以我才來ktop學工夫 發表人 - japhenchen 於 2003/10/09 17:17:48
japhenchen
高階會員


發表:51
回覆:444
積分:184
註冊:2003-07-23

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-10-09 17:21:32 IP:211.96.xxx.xxx 未訂閱
加$是用來隱藏共享囉,你的資料夾共享名稱如果不加$字符,那麼只要輸入 在windows任何一個explorer的位址列裡輸入 \\servername ,就可以看到那個共享文件夾,如果不想被人看到,就在設定共享時,名字後面加個$,就躲起來啦!    答案就是~~~~做不到你想要的功能囉~~~~二台電腦之間只不容許二個IPC$管道同時存在,不管是不是同帳號權限都不行(笨笨的回答,同帳號那又何苦再建一個新的?舊的不好用嗎?)~~~~ 發表人 -
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-10-09 17:41:17 IP:61.221.xxx.xxx 未訂閱
那我要如何刪除原來的IPC$
------
ivankuo
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-10-09 18:05:20 IP:61.221.xxx.xxx 未訂閱
引言: 那我要如何刪除原來的IPC$
經過詢問公司的系統人員解釋,大概清楚知道您的意思了,非常感寫您的詳細說明,不知道您有沒有其他的方式ㄋ??
------
ivankuo
japhenchen
高階會員


發表:51
回覆:444
積分:184
註冊:2003-07-23

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-10-09 18:20:26 IP:211.96.xxx.xxx 未訂閱
WNETCancelConnection2( pchar('\\A\IPC$'),0,true); 我不懂,不懂,不懂....所以我才來ktop學工夫
japhenchen
高階會員


發表:51
回覆:444
積分:184
註冊:2003-07-23

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-10-09 18:25:43 IP:211.96.xxx.xxx 未訂閱
其他的方法啊,有啊,很多呢~ 像我剛剛講用SQL存放檔案的方法也是一例我蠻慣用的方法,幾十萬筆的大頭照,SELECT不到一秒就找到了,1MB以內下載也不到0.5秒,我已經把很多扯到權限的東西全用這招在存了 那還有別的方法,不外乎就是http、ftp,不然就是自己另外寫一支tcp file server..........啊方法很多,可以變變看囉 我不懂,不懂,不懂....所以我才來ktop學工夫
系統時間:2024-04-25 12:27:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!