如果從 java 程式調用,Smbclient 將失敗

如果從 java 程式調用,Smbclient 將失敗

最初我在另一個線程中發布了這個問題:

smbclient 連接到 Windows 盒子時出現 NT_STATUS_LOGON_FAILURE

所以這裡是:

我需要從 Oracle 資料庫內的 java 程式將 ZPLII 檔案傳送到 zebra 印表機。

如果我運行 bash 命令進行列印,它會起作用:

[oracle@serverws01 ~]$ smbclient //serverps02/zebra_teste -U 'XXXXXX\uuu.uuuuuu%pppppppppp' -W XXXXXX -c 'print /home/oracle/oradata/zpl/et.txt'
Domain=[XXXXXX] OS=[Windows Server 2012 Datacenter 9200]
Server=[Windows Server 2012 Datacenter 6.2]
putting file /home/oracle/oradata/zpl/et.txt as et.txt-18047 (102.4 kb/s) (average 102.4 kb/s)
[oracle@serverws01 ~]$

當然,我隱藏了該命令的使用者和密碼。但他們是正確的。

但是,如果我需要在 Oracle 資料庫的 java 原始程式碼中使用此命令,則相同的呼叫會失敗:

SQL> declare
2 cmd varchar2(2000);
3 begin
4 cmd := 'smbclient -U ''xxxxxx\xxxxxx%xxxxxx'' //serverps02/zebra_teste -c ''print /home/oracle/oradata/zpl/et.txt'' ';
5 dbms_output.put_line(cmd);
6 rc(cmd);
7 end;
8 /
smbclient -U 'xxxxxx\xxxxxx%xxxxxx' //serverps02/zebra_teste -c 'print /home/oracle/oradata/zpl/et.txt'
**session setup failed: NT_STATUS_LOGON_FAILURE**
X = 1
PL/SQL procedure successfully completed.

這次您可能會發現雙引號有些奇怪,與第一個範例不同。但這是 plsql 組裝包含引號的字串的方式。

smbclient有人知道在Java程式內部呼叫是否需要一些額外的權限?

印表機是網路印表機,印表機伺服器是Windows NT。

相關內容