Smbclient は Java プログラムから呼び出されると失敗します

Smbclient は Java プログラムから呼び出されると失敗します

最初、私はこの質問を別のスレッドに投稿しました:

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.

今回は、最初の例とは異なり、二重引用符に何か奇妙な点があるかもしれません。しかし、これは引用符を含む文字列を PL/SQL が組み立てる方法です。

smbclientJava プログラム内で呼び出すには追加の権限が必要かどうか知っている人はいますか?

プリンターはネットワーク プリンターであり、プリント サーバーは Windows NT です。

関連情報