[SAP on Windows] パスワードを忘れたときは

日々のパスワード管理は大変です。NetWeaver に至っては、OS, RDBMS, SAP ユーザーと、ユーザーアカウントも多様なので、覚えるのが大変です。”sap password forgot” で検索をかけると、国を問わず、人々はパスワードを忘れているようです。忘れる以外にありがちなのは、インストール時に想定外の文字列を入力してしまった場合など。SAPinst のパスワード入力欄はコピー アンド ペーストが可能なので、ひたすらコピーでインストールを進めると、コピー元の文字列が違っていたらアウト、一発退場です。

運用環境であれば、パスワードはきっちり管理されているので問題ないとは思いますが、NSP のように軽い気持ちでインストールする場合は要注意です。大昔にインストールして、久々に使おうとしたらパスワードを忘れていた、ということも多いでしょう。さて、パスワードを忘れてしまった場合は一体どこまで復旧可能なのでしょうか。

実は、Windows の Administrator のパスワードさえ分かれば、以下全てのユーザーの復旧が可能です。といっても、パスワードをリセットすることができるだけで、元のパスワードは神のみぞ知る、です。

  • Windows ユーザー (<sid>adm, SAPService<SID>)
  • 全クライアントの SAP ユーザー
  • MaxDB ユーザー (DBM Operator, Database User)
    以下、順番に手順を紹介します。なお、例によって SAP がサポートしているかどうかは不明なやり方ですし、私としてもログオンできることぐらいしか検証していないので、自己責任で参考にしてください。また、Windows + MaxDB + NetWeaver 7.0 EhP1 の環境限定です。特に EhP2 以降での動作確認は未実施です。

Windows ユーザーのパスワードを忘れた!!

Windows パスワードは単純です。NetWeaver 側で管理されているわけではないので、Administrator などでログオンして Windows ユーザーのパスワードを再設定し、サービス起動アカウントを再入力するだけです。お馴染みの以下のダイアログにパスワードを入れ直して終了です。
WS002

SAP ユーザーのパスワードを忘れた!!

他の管理者アカウントが生きていれば、SU01 からリセットするだけで済む話ですが、クライアントの全ユーザーのパスワードが分からなくなった場合は、そもそもログオンできません。こんなときは、SAP* ユーザーのパスワードをリセットしてログオンすることができます。クライアント コピーを実行したことがある人にはお馴染みの方法です。

まずは、以下のプロファイル パラメーターをデフォルト プロファイルかインスタンス プロファイルに設定します。デフォルト値は 1 なので、明示的に設定しましょう。このプロファイルを有効にするためにはインスタンス再起動が必要なので、再起動して下さい。

login/no_automatic_user_sapstar = 0

次に、以下の SQL クエリを実行して下さい。MaxDB には SQL Studio という GUI 形式の SQL クライアントがあり、NSP にも付属しているので、それを使うと便利です。Database Studio でもよいです。

update usr02 set bname=’SAPSTAR’ where bname=’SAP*’ and mandt=’<該当するクライアント>’

例えば、クライアント 000 と 001 で同コマンドを実行した場合です。SAP* という行が SAPSTAR に変わっています。
WS000

これにより SAP* のパスワードがリセットされ、パスワードは pass になります。クライアント 000 や 001 でも pass になります。SAP* でログオンできれば、SU01 が使えます。DDIC などの管理者アカウントでログオンできるようになったら、上記の UPDATE 文で退避しておいた SAP* の行を元に戻し、SU01 でパスワードを再設定すれば完了です。インターネット検索でも、USR02 を編集する方法は数多く紹介されていますが、DELETE 文で SAP* の行を消してしまう荒業が紹介されていたりします。もちろん同じ結果にはなりますが、SAP* アカウントを新規作成するのは微妙です。UPDATE で退避する方法をお勧めします。

テーブル USR02 には、SAP ユーザー パスワードのハッシュキーが記録されています。SAP ユーザーは、このテーブルのハッシュを照合することで認証されます。しかし、プロファイル login/no_automatic_user_sapstar が 0 に設定されている場合は、 キーが存在しないときの SAP* ユーザーにはデフォルトの pass というパスワードが設定されます。クライアント コピーではお馴染みの知識ですが、実はクライアント 000 でも同様のことが可能です。ただしこれは、NetWeaver 7.0 EhP1 で、バージョンによって仕様が変化する可能性が高い部分です。なお、USR01 などの他のテーブルは一切変更しません。

MaxDB のアカウントを忘れた!!

一番厄介なケースです。そもそも MaxDB の知名度が低いですね。まあ私も大して知りません。そもそも MaxDB にはどんなユーザーがいるかご存知でしょうか。アカウントは 2 種類あり、NSP インストール直後は以下のようになっています。

      • DBM Operator: SUPERDBA, CONTROL
  • Database User: SUPERDBA, SAPNSP
    DBM Operator とは、データベースの起動/停止など、データベースそのものを管理する操作をするときに必要になるアカウントです。Database User は、いわゆるスキーマ ユーザーで、データベース内のオブジェクトを管理するときに必要になるアカウントです。SUPERDBA というアカウントは、一つのアカウントで、両方の役割を兼ねています。同一アカウントなので、パスワードは一つしか持っていません。つまり、インストール直後の NSP の MaxDB には 3 つのアカウントが存在します。そして、これら全部のパスワードを忘れたとしても何とかなります。

MaxDB には xuser という仕組みがあり、インストールしたときのアカウント情報がレジストリに保存され、パスワードを入力しなくても管理コンソールにログオンすることができます。Oracle の conn / as SYSDBA と同じような仕組みです。<sid>adm ユーザーでログオンして、コマンド xuser list を入力すると以下のような出力を得ます。

> xuser list

—————————————————————–
XUSER Entry  1
————–
Key         : DEFAULT          
Username    :SAPNSP
UsernameUCS2:S.A.P.N.S.P. . . . . . . . . . . . . . . . . . . . . . . . . . .
Password    : ?????????
PasswordUCS2:?????????
Dbname      :NSP 
Nodename    :win2008-nw701                    
Sqlmode     :SAPR3  
Cachelimit  :-1
Timeout     :0
Isolation   :0
Charset     :<unspecified>    
—————————————————————–
XUSER Entry  2
————–
Key         :c    
Username    :CONTROL  
UsernameUCS2:C.O.N.T.R.O.L. . . . . . . . . . . . . . . . . . . . . . . . . .
Password    : ?????????
PasswordUCS2:?????????
Dbname      :NSP 
Nodename    :win2008-nw701        
Sqlmode     :SAPR3  
Cachelimit  :-1
Timeout     :0
Isolation   :0
Charset     :<unspecified>    
—————————————————————–
XUSER Entry  3
————–
Key         :c_J2EE    
Username    :CONTROL    
UsernameUCS2:C.O.N.T.R.O.L. . . . . . . . . . . . . . . . . . . . . . . . . .
Password    : ?????????
PasswordUCS2:?????????
Dbname      :NSP   
Nodename    :win2008-nw701   

Sqlmode     :SAPR3  
Cachelimit  :-1
Timeout     :0
Isolation   :0
Charset     :<unspecified>    
—————————————————————–
XUSER Entry  4
————–
Key         :w  
Username    :SUPERDBA          
UsernameUCS2:S.U.P.E.R.D.B.A. . . . . . . . . . . . . . . . . . . . . . . . .
Password    : ?????????
PasswordUCS2:?????????
Dbname      :NSP   
Nodename    :win2008-nw701  
Sqlmode     :SAPR3  
Cachelimit  :-1
Timeout     :0
Isolation   :0
Charset     :<unspecified>    

これがレジストリに保存されているアカウント情報です。SAPNSP, CONTROL, SUPERDBA という 3 つのアカウントが全て保存されていることが分かります。これらのアカウントは key という文字列で管理/識別されます。DEFAULT, c, c_J2EE, w という値です。アカウントのパスワードを忘れても、これらの xuser エントリを使って CUI の管理ツールにログオンし、パスワードを変更することができます。

CONTROL アカウントは純粋な DBM Operator なので、データベースが起動していなくてもパスワードの変更が可能です。しかし、SUPERDBA や SAPNSP は、Database User なので、データベースが起動していないとパスワードを変更することができません。しかし Windows の場合は、MaxDB インスタンスはサービスとして 起動できるので、起動停止時に MaxDB アカウントは不要です。

WS009

パスワードを忘れてしまった場合は、サービス起動によりデータベースを起動してから、以下のようにコマンドを実行します。

>dbmcli -U c -n localhost
dbmcli on localhost : NSP>user_getall
OK
CONTROL
SUPERDBA


dbmcli on localhost : NSP>user_put control set password=新パスワード
OK


dbmcli on localhost : NSP>user_put superdba set password=新パスワード
OK


dbmcli on localhost : NSP>exit
OK

>

dbmcli というのが MaxDB の CUI 管理ツールです。MaxDB をインストールすると、自動的にインストールされます。これで superdba と control ユーザーのパスワードがリセットできました。SAPNSP ユーザーは、この方法では変更できないので、今回は Database Manager の GUI で変更します。コマンドもありそうですが、方法を知りません。

Database Manager を起動し、[Configuration] > [Database User…] をクリックします。
WS005

データベース管理者アカウントを聞かれるので、SUPERDBA アカウントを入力して [Next] をクリックします。CONTROL アカウントは、管理者ではないのでここでは使えません。
WS006

SAPNSP をダブルクリックします。
WS007

[Change] ボタンをクリックすると、パスワード変更画面が表示されます。
WS008

これで MaxDB アカウントのパスワードは全てリセットできました。が、これだけだとダメです。先にちらっと書きましたが、パスワード情報が xuser エントリとしてレジストリに保存されていて、それも変更しないと後々困ります。特に、SAPNSP に該当する xuser エントリは NetWeaver が MaxDB に接続するときに使っているので、SAPNSP のパスワードを変更しただけだと NetWeaver が起動しなくなります。NetWeaver が MaxDB に接続するときはワーク プロセスの実体である disp+work.exe が SAPNSP アカウントを使ってアクセスしに行きます。xuser エントリが間違っている場合は、メッセージ サーバーの起動の後、disp+work の起動でコけます。

WS003

ワーク プロセスの開発者トレースに以下のようなログが出力されます。dev_disp ではなく dev_w0 などに出力されるので注意。

C  Loading SQLDBC client runtime …
C  SQLDBC SDK Version : SQLDBC.H  7.6.0    BUILD 002-121-083-965
C  SQLDBC Library Version : libSQLDBC 7.6.5    BUILD 011-123-196-300
C  SQLDBC client runtime is MaxDB 7.6.5.011 CL 196300
C  SQLDBC supports new DECIMAL interface : 0
C  SQLDBC supports VARIABLE INPUT data   : 1
C  SQLDBC supports keepAlive indicator   : 0
C  INFO : SQLOPT= -I 0 -t 0 -S SAPR3
C  Try to connect (DEFAULT) on connection 0 …

C Wed Dec 29 13:36:40 2010
C  *** ERROR => Connect to database failed, rc = -4008 (POS(1) Unknown user name/password combination)
[dbsdbsql.cpp 137]
B  ***LOG BY2=> sql error -4008  performing CON [dbsh#2 @ 1208] [dbsh    1208 ]
B  ***LOG BY0=> POS(1) Unknown user name/password combination [dbsh#2 @ 1208] [dbsh    1208 ]
B  ***LOG BY2=> sql error -4008  performing CON [dblink#2 @ 431] [dblink  0431 ]
B  ***LOG BY0=> POS(1) Unknown user name/password combination [dblink#2 @ 431] [dblink  0431 ]
M  ***LOG R19=> ThInit, db_connect ( DB-Connect 000256) [thxxhead.c   1449]
M  in_ThErrHandle: 1
M  *** ERROR => ThInit: db_connect (step 1, th_errno 13, action 3, level 1) [thxxhead.c   10563]

NetWeaver の起動に関連するのは SAP<SID> だけなので、SUPERDBA, CONTROL のパスワードをリセットするだけであれば、xuser エントリを更新しなくても NetWeaver の起動には問題ありません。が、そのままにしておくと、次回パスワードを忘れたときに手も足も出なくなります。

xuser エントリの一覧コマンドは xuser list でした。そして、xuser キーと MaxDB アカウントとの対比は以下のようになっていました。

  • DEFAULT –> SAPNSP
  • c –> CONTROL
  • c_J2EE –> CONTROL
  • w –> SUPERDBA
    これもバージョンによって変わる可能性があるので、必ず自分の環境で確認しましょう。基本的にはキーとアカウントの対が合っていればいいのですが、一覧に表示される他のパラメーター(タイムアウトなど)も合わせた方がいいので、必ず変更前の xuser 一覧を記録しておきましょう。
    xuser エントリの変更も xuser コマンドを使います。一度削除してから再設定する場合のコマンドは以下の通りです。

xuser -U DEFAULT clear
xuser -U c clear
xuser -U c_J2EE clear
xuser -U w clear

xuser -u SAPNSP,パスワード -U DEFAULT -d NSP -n ホスト名 -S SAPR3 -t 0 -I 0 set
xuser -u CONTROL,パスワード -U c -d NSP -n ホスト名 -S SAPR3 -t 0 -I 0 set
xuser -u CONTROL,パスワード -U c_J2EE -d NSP -n ホスト名 -S SAPR3 -t 0 -I 0 set
xuser -u SUPERDBA,パスワード -U w -d NSP -n ホスト名 -S SAPR3 -t 0 -I 0 set

    なお、このコマンドはレジストリを書き換えるので、管理者特権で実行する必要があります。特権がない場合もエラーは出ませんが、操作は中断されているので注意が必要です。
    これで NetWeaver も無事起動するようになったはずです。

最後に、パスワードのリセット方法を表にまとめました。

Windows ユーザー Administrator でパスワードを変更
サービス起動アカウントを変更
SAP ユーザー プロファイル パラメータを設定
インスタンス再起動
UPDATE 文を実行して SAP* のパスワードを pass にリセット
MaxDB ユーザー Windows サービスから MaxDB インスタンスを起動
xuser エントリを利用して、CUI 管理コンソールでログオン (dbmcli -U c)
user_put コマンドでパスワードを変更
xuser エントリを更新

[SAP] ABAP 開発環境をインストールする Part3

前回ので SAP NetWeaver ABAP のインストールは完了しました。ちなみに、試用版のインストールにおける傾向と対策は、下記のような感じでしょうか。

  • そもそも SAPinst が起動しない
    → OS など、環境が対応していない
    → JRE が入っていない
    → アンチウイルス
    → 偶然(サーバー再起動で直ったりします)
  • Windows ユーザー作成
    → パスワードポリシー
  • NetWeaver 起動
    → メモリ不足
    → TCP ポートの競合
    → ネットワーク関連
    → 偶然

エラーの原因は様々なので、結局はイベントログや、NetWeaver の起動ログなどを見て調べることになります。検索エンジンで検索すると、SDN のフォーラムなどがヒットすることもよくあります。必ず英単語で検索しましょう。

次に MaxDB の GUI クライアントツールと SAP GUI をインストールします。前者はゲスト OS、後者はホスト OS にインストールします。

MaxDB の GUI クライアントツールは 2 種類あり、今回ダウンロードした試用版には、Database Manager と、MaxDB Database Studio の両方のインストーラが含まれています。用途は同じなので、どちらか一つをインストールすれば十分です。後者の Database Studio の方が新しく、機能も多いです。しかしDatabase Studio は、Eclipse のプラグインとして開発されており、Database Manager より高負荷です。試用版ではどちらも 32bit ですが、Database Studio は 64bit 版があったりと、それなりに有利な点もあるのですが、起動/停止や、各種パラメータ設定などの基本的な機能は Database Manager でも当然行えます。32bit しかリリースされていませんが、64bit OS でも問題なく動きます。そんなわけで、Database Manager をインストールします。

以下のインストーラを実行して、ウィザードに従って進めるだけです。
MAXDBTOOLS\DBM76.exe

参考までに、Database Studio のインストーラは下記のファイルです。
MAXDBTOOLS\maxdb-studio-desktop-win-32bit-i386-7_8_01_16\SDBSETUP.exe

次に、SAP GUI をインストールします。今回はホスト OS に入れますが、もちろんゲスト OS に入れても動きます。NetWeaver 7.02 の試用版に同梱されているのは最新版の SAP GUI 7.2 のようです。7.2 は Windows 7 にも対応しており、もちろん NetWeaver 7.00 や R/3 などの過去の SAP 製品にログオンすることも可能です。インストーラは下記jのファイルです。

GUI\SAP_GUI_FOR_WINDOWS_720_PL3_CORE\SAP_GUI_for_Windows_7.20_PL3_CORE_Components.exe

なお、これは正式には SAP GUI for Windows というアプリケーションで、SAP GUI for Java と SAP GUI for HTML というアプリケーションも存在しています。for Java は 今回の NetWeaver 7.02 Trial にも入っています。名前の通り Java アプリケーションなので、Windows 以外にも Linux や Macintosh でも動くと思います。試したことはないですが。SAP GUI for HTML は、Web アプリケーションで、これは NetWeaver ABAP の機能の一つなので、特にインストールすることなく、誰でも使えます。微妙に設定が必要ですが、規定の URL にアクセスするだけです。

SAP GUI のインストールもウィザードに従って進めていくだけで、特筆すべきところはなしです。

以上でインストール作業は完了です。

細かい操作手順については、そのうち書いていく予定ですが、とりあえず起動/停止の手順と、SAP GUI 操作の初歩の初歩を紹介します。

まずは NetWeaver の起動/停止。方法はいろいろありますが、GUI を使った基本的な操作から。

NetWeaver をインストールし終わると、デスクトップに SAP Management Console というショートカットができます。これが SAP の GUI 管理ツールです。MMC のスナップインとして自動的にインストールされています。SAPMMC と呼ばれることが多いです。[ファイル名を指定して実行] に sapmmc.msc と入れて実行しても起動できます。

image

MMC スナップインとして追加されている、ということは、そうです、COM です。%SystemRoot%\System32\sapmmc.dll という DLL が存在し、こいつが COM サーバーとして動いています。こいつの仕様が公開されているかどうかはちょっと不明ですが、見たことないです。プログラム的に NetWeaver の起動停止を行ないたい場合は、WSDL が公開されている Web サービスを使うことができます。そもそもコマンドラインツールがあるので、それを使うことが多いです。

こんな画面です。直感的に分かると思いますが、三角が起動で、四角が停止です。なお、このツール自体は、Windows サービスである sapstartsrv.exe と SOAP で通信しており、sapstartsrv サービス経由で起動/停止、及び、コンソールに表示されるプロセスのステータス情報の取得などを行なっています。アイコンが緑色だと起動で、黄色は起動/停止中、灰色が停止です。ライセンス期限が切れると赤くなったりと、カラフルなやつです。
image

NetWeaver は SAPMMC で停止できますが、MaxDB インスタンスは止まっていません。そこで、インストールした Database Manager を使います。スタートメニューとデスクトップにショートカットができているので、そこから起動します。このツールも、見たとおりに操作すれば OK です。ただし、こちらは最初にインスタンスを登録しなければなりません。今回の NetWeaver 試用版では、以下の情報でインスタンスを登録してください。

  • データベース名: NSP
  • ユーザ名: superdba または control
  • パスワード: NetWeaver インストール時に入力したパスワード

インスタンスが登録されると、下図のようにインスタンスの情報が出てきます。シンプルで分かりやすいです。ツールバーの赤いボタンで停止、緑のボタンで起動です。
image

当然のことですが、停止の時は、NetWeaver が先で、その後にデータベースを止めます。起動はその逆で データベース、NetWeaver の順で起動します。実は NetWeaver も データベースも起動中のまま、OS をシャットダウンしても意外と平気だったりしますが。

起動/停止を覚えたところで、次は SAP GUI の操作です。こんな外見です。SAP GUI 7.1 とちょっと見た目が変わりました。
image

こちらも MaxDB と同様、インスタンスを自分で追加しなければなりません。Ctrl+N を押すと、新規エントリ画面が表示されるので、ウィザードに従って進めていきます。

[ユーザ指定システム] のまま、[次画面] をクリックします。
image

必要な情報を入力します。今回インストールしたシステムは以下ですので、それを入力します。

  • システムID: NSP
  • インスタンス番号: 00

あとはデフォルト設定でよいので、ここで [終了] をクリックします。

image

システムが追加されました。ダブルクリックすれば起動します。
image

ですが、その前に、サーバー側でファイアウォールの設定が必要です。SAP GUI と NetWeaver は DIAG というプロトコルで通信していることは触れましたが、DIAG も TCP の上位プロトコルなので普通にポートを開ければいいです。今回はインスタンス番号が 00 なので、3200 ポートを許可する受信ルールを作れば接続できます。使い方次第では他のポートも開ける必要がありますが、とりあえずここでは 3200 だけ開けます。例えば Web サーバーとしては、HTTP ポート 8000 を使っています。

image

接続するには、SAP GUI に追加したエントリをダブルクリックします。ログオン画面が出てくるので、既定のユーザーアカウントを入力します。以下はその一覧です。
(クライアント/ユーザー名/パスワード)

  • 000/SAP*/インストール時に入力したパスワード
  • 000/DDIC/インストール時に入力したパスワード
  • 001/SAP*/インストール時に入力したパスワード
  • 001/DDIC/インストール時に入力したパスワード
  • 001/BCUSER/abcd1234

クライアントって何、という質問に答えるのはけっこう厄介。独立したデータを持てる、NetWeaver 独自の単位です。データの一部を完全に独立して持つことができ、一方 ABAP プログラムは全てクライアント間で共通です。特に決まった使い方はなく、例えば、1つの検証サーバーを立てておいて、検証用クライアントをたくさん作っておくと、複数のデータでの検証が一つのサーバーで実施できてエコ!みたいな感じです。

000 というのは特別なクライアントなので、むやみやたらと変更してはいけません。そんなわけでここでは 001 に ユーザー BCUSER でログオンします。

image

ログオンすると以下の画面が表示されます。
image

左上のテキストボックスに、数百と存在する「魔法のおまじない」を入力してエンターキーを押すと、そのおまじないに沿ったプログラムが実行され、NetWeaver のあらゆる機能を使うことができます。ERP であれば、受注や入庫、入金といった基幹システムの画面が出てくるのです。この「魔法のおまじない」のことを、トランザクションコードと呼びます。