Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
Sawa_Ito
Product and Topic Expert
Product and Topic Expert
0 Kudos
179

このブログは、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 リレーショナルエンジンは、クラウドデータベースなため、接続パラメーターは、少し異なります。

もう一つ気をつけなければならない重要な点としては、暗号化されたパスワードを他のユーザーに使うことはできません。

パスワードを作成するために使用されているハッシュアルゴリズムは、ユーザー名に紐づいているからです。

 

 




オリジナルのブログはここまでです。