Windowsでネットワークドライブに接続する際に発生するシステムエラー1219について解決策を探ってみたのでメモしておく。
Windowsでエラー(1219)が発生
問題が起きたのは、クライアント(Windows7 Pro 32bit)からサーバ(Centos 6.5 32bitで動くsamba3.x)へアクセス時。
Windowsのコマンドプロンプトへ次のnet use コマンドを打ち込んでネットワークドライブを割り当て(マウント)をしてみる。
[shell]
net use N: \192.168.0.10share password /USER:user01
[/shell]
通常であれば「コマンドは正常に終了しました」と表示される。また、認証に問題がある場合は「システムエラー5が発生しました。」と表示される。だが、「システムエラー1219が発生しました。」と表示された。
システムエラー1219とは一体何か
エラーメッセージには次のように書かれている。
システム エラー 1219 が発生しました。
同じユーザーによる、サーバーまたは共有リソースへの複数のユーザー名での複数の接続は許可されません。サーバーまたは共有リソースへの以前の接続をすべて切断してから、再試行してください。
つまり、「コンピュータの1ユーザから1台のサーバへ複数の認証情報(ユーザ名とパスワード)でアクセスしようとしていること」に対するエラーを表している。しかし、現象が起きた時はメッセージに書かれているようにあらかじめnet useコマンドで切断を行っていた。
[shell]
net use N: /DELETE
[/shell]
原因はWindows
切断を行っているのに認証情報が残ってしまうのはWindowsが原因として考えられた。何が原因なのか断言できないが個人的にはWindowsのキャッシュが影響している可能性が考えられた。
@ITの記事にも「smbプロトコルの仕様ではない。クライアント側の制限によるもの。」と書かれていた。
基礎から学ぶWindowsネットワーク:第21回 ファイル共有プロトコルSMB/CIFS(その2) (3/3) – @IT
解決策
調べてみたものの根本的に解決する方法(切断して別の資格情報で再接続)が見つからなかった。見つかった解決策は名前解決で別サーバとして認識させること。
〇lmhostを編集してホスト名を割り当てる(管理者権限が必要)
Windowsにはコンピュータごとにホスト名をIPに対して割り当てられるのでこれを使う。編集の方法は検索すれば出てくる。
〇DNSサーバでホスト名割り当てる
特にコンピュータの台数が多い場合は個々のコンピュータの設定を変更せずに可能。一般の家庭向けルータでDNS機能があるものは少ないと思う。
〇NetBIOSで名前解決してアクセスする
サーバ側で事前に設定が必要。Sambaでファイルサーバを構築しているならsmb.confにnetbios nameで設定可能。UDP/137の解放をすることも忘れずに。
最近のWindowsだとこの現象が起きないからバージョンとかアップデートの兼ね合いもあるのかもしれない。自分でも起きる条件がつかみきれていない昨今。難しい。
コメントを残す