SAP IQ または、SAP HANA Cloud, data lake リレーショナルエンジンのインスタンスから別のインスタンスへログインをコピーする
2023-12-19 15:1:46 Author: blogs.sap.com(查看原文) 阅读量:5 收藏

このブログは、2023 年 5 月 18 日に SAP ジャパン公式ブログに掲載されたものを SAP ジャパン公式ブログ閉鎖に伴い転載したものです。


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

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

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


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



文章来源: https://blogs.sap.com/2023/12/19/sap-iq-%e3%81%be%e3%81%9f%e3%81%af%e3%80%81sap-hana-cloud-data-lake-%e3%83%aa%e3%83%ac%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%8a%e3%83%ab%e3%82%a8%e3%83%b3%e3%82%b8%e3%83%b3%e3%81%ae%e3%82%a4%e3%83%b3/
如有侵权请联系:admin#unsafe.sh