このブログは、2023 年 5 月 18 日に SAP ジャパン公式ブログに掲載されたものを SAP ジャパン公式ブログ閉鎖に伴い転載したものです。
このブログは、markmumy が執筆したブログ「Copying a Login From One SAP IQ or SAP HDLRE Instance to Another」(2023 年 1 月 20 日)の抄訳です。最新の情報は、SAP Community の最新ブログやマニュアルを参照してください。
長年にわたり、多くのお客様から一つの SAP IQ インスタンスから他の SAP IQ インスタンスへログインをコピーまたは移行する機能をつけてほしいとリクエストがありました。
幸い、同じパスワードを維持したい場合、現在はこれが可能です。
以下で説明するものは、SAP IQとSAP HANA Cloud, data lake リレーショナルエンジン (HDLRE) に同梱されている iqunload ユーティリティーの一部として SAP が使用しているプロセスと同じものです。
ログインとパスワードをコピーするには、SYS.SYSYSER と SYS.SYSUSERPASSWORD の 2 種類のシステムテーブルを使用する必要があります。
これらのテーブルには、(設定されている場合には)システム内の各ユーザーとグループのログインとパスワードが含まれています。
パスワードの抽出プロセスはとても簡単です。
USER_NAME と PASSWORD のカラムが必要なだけです。パスワードは SAP の安全な方法を使用して暗号化されています。
パスワードのリバースエンジニアリングはできません。
しかしながら、CREATE USER と GRANT CONNECT 構文を使用することで、暗号化されたパスワードを渡すことができます。
この方法を使用することで、古いシステムのパスワードで新しいシステムにユーザーを追加することができます。
以下で説明するプロセスは、システムから全ユーザーと null 以外のパスワードを pull します。
ユーザー名または wildcard を指定し、適切な GRANT CONNECT ステートメントを生成することができます。
しかしながら、このプロセスの一部として、暗号化されたパスワードは 16 進数文字列にコンバートする必要があります。
これを行うための hextostr 関数のコードも以下には含めています。
コードは以下のようになります。
drop function if exists dbo.hextostr; drop procedure if exists dbo.sp_iqreverse_passwd; create function dbo.hextostr ( bin_expr varbinary(255) ) returns varchar(255) begin declare data_len int; declare i int; declare newstr varchar(255); -- for IQ v15 set temporary option ansi_substring='off'; set data_len = datalength( bin_expr ); set newstr = ''; set i = 1; while i <= data_len loop set newstr = newstr || '\x' || lower( substring ( inttohex ( substring( bin_expr,i,1) ), 15, 2 ) ); set i = i + 1; end loop; return rtrim( newstr ); end; create procedure dbo.sp_iqreverse_passwd ( in search_name varchar(255) default '%' ) begin select 'set temporary option escape_character=''on'';' as 'GRANT STMT' union all select 'grant connect to ' + u.user_name + ifnull(sup.password,';',' identified by encrypted ''' + hextostr( sup.password ) + ''';' ) from sys.sysuser u, sys.sysuserpassword sup where u.user_id = sup.user_id and sup.password is not null and lower(u.user_name) like lower(search_name); end;
このプロシージャーを実行するには、単純に SAP IQ または SAP HANA Cloud, data lake リレーショナルエンジンにログインし、このプロシージャーを実行するだけです。
grant connect to mark identified by 'password'; call sp_iqreverse_passwd ( 'mark' );
以下のように出力されます。
GRANT STMT ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- set temporary option escape_character='on'; grant connect to mark identified by encrypted '\x01\x2f\x7f\xdf\xf5\x5a\x65\x7d\xa4\xf5\x5f\xf3\x4b\xba\x39\x45\x7f\x9f\x80\xc2\xf5\xa3\x3d\x45\x42\xff\xe8\x0d\xbe\x72\x93\xc5\x60\xda\x97\xe9\x4d'; (2 rows)
このコマンドを同じ SAP IQ インスタンスに対して実行できます。
revoke connect from mark; set temporary option escape_character='on'; grant connect to mark identified by encrypted '\x01\x2f\x7f\xdf\xf5\x5a\x65\x7d\xa4\xf5\x5f\xf3\x4b\xba\x39\x45\x7f\x9f\x80\xc2\xf5\xa3\x3d\x45\x42\xff\xe8\x0d\xbe\x72\x93\xc5\x60\xda\x97\xe9\x4d';
‘password’ のパスワードを使用して動作するか確認します。
[sap@tmp]$ dbisql -host localhost -port 2638 -nogui -c "uid=mark;pwd=password" (mark)> select user_name(), db_name() user_name() db_name() --------------------- mark iqdemo (1 rows)
SAP HANA Cloud, data lake リレーショナルエンジンでも同じコードとプロセスを使用することができます。
もちろん、SAP HANA Cloud, data lake リレーショナルエンジンは、クラウドデータベースなため、接続パラメーターは、少し異なります。
もう一つ気をつけなければならない重要な点としては、暗号化されたパスワードを他のユーザーに使うことはできません。
パスワードを作成するために使用されているハッシュアルゴリズムは、ユーザー名に紐づいているからです。
オリジナルのブログはここまでです。
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
26 | |
22 | |
19 | |
13 | |
10 | |
9 | |
9 | |
8 | |
7 | |
7 |