Technology Blog Posts by SAP
cancel
Showing results for 
Search instead for 
Did you mean: 
Sawa_Ito
Product and Topic Expert
Product and Topic Expert
0 Likes
477

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

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

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

 

 




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