SAP HANAデータベースにおけるユーザ削除の仕様

はじめに
近年、SAPシステムのクラウド移行が加速する中で、RISE with SAP(以下、RISE)への移行プロジェクトが増加しています。
RISE環境ではSAP HANAデータベースがSAP社の管理下となるため、原則として顧客側がデータベースへ直接接続することはできません。特別な要件がある場合は、SAP社へ依頼することでユーザ登録用のユーザが提供されて、顧客側でユーザを登録する形となります。なお、登録するユーザには割り当てができる権限は制限されています。
このような背景から、SAP社が提示するRISEへの移行の前提作業として、SAP HANA上に存在する「顧客固有のデータベースユーザ」(※)の削除が求められるケースがあります。
※テーブルUSR01などで管理されているSAPユーザではなく、SAP HANAを操作するためのDBユーザ
本記事では、SAP HANA上のユーザを削除する際に押さえておくべきポイントについて、ご紹介します。
<対象バージョンおよび前提条件>
本記事で紹介する内容は、SAP HANA Platform 2.0 SPS07 / SPS08 および SAP HANA Studioで検証した結果に基づいています。
<本記事の内容>
1.ユーザ削除の挙動
1.1. RESTRICTとCASCADEの違い
1.2. スキーマとオブジェクトの概要
1.3. ユーザ削除に伴って削除される対象
2.削除対象への対応:権限/ロール編
2.1. 権限の確認
3.削除対象への対応:スキーマ/オブジェクト編
3.1. オブジェクトの確認
3.2. オブジェクトの移行(エクスポート/インポート)
4.参考リンク
1.ユーザ削除の挙動
1.1. RestrictとCascadeの違い
SAP HANAでユーザを削除する際には、「Restrict」または「Cascade」のどちらかのオプションを指定します。削除範囲や影響が大きく異なるため、まずはその概要を説明します。
① Restrict
ユーザが所有するオブジェクトが存在する場合、ユーザの削除を拒否します。
より正確には、ユーザが所有するオブジェクトが存在するか、ユーザのホームスキーマにスキーマローカルロールが作成されている場合、削除を拒否します。
(※SAP HANAにおけるスキーマやオブジェクトについては、「1.2. スキーマとオブジェクトの概要」で説明します。)
② Cascade
ユーザが所有するスキーマやオブジェクト等をすべて削除したうえでユーザを削除します。
必ず上記どちらかのオプションを選択する必要があるため、ユーザを削除する上では、所有するオブジェクトの削除が必須となります。
1.2. スキーマとオブジェクトの概要
ユーザ削除によって具体的にどのような影響が出るかを確認する前に、前述したSAP HANAデータベースにおける「スキーマ」と「オブジェクト」について簡単に説明します。
① スキーマとは
スキーマは、データベースのオブジェクトを管理するコンテナのことです。
オブジェクトを論理的に分割することができるので、オブジェクト名の衝突を防いだり、権限管理の単位として使用することができます。ユーザを作成するとユーザ名と同じ名称のスキーマが自動で作成され、これをユーザの「ホームスキーマ」といいます。
② オブジェクトとは
スキーマの中に格納されるデータベースの要素のことです。
具体的には、テーブルやインデックス、ストアドプロシージャなどです。
③ 所有者について
各スキーマ/オブジェクトには所有者が設定されています。デフォルトでは当該スキーマ/オブジェクトを作成したユーザが所有者になりますが、明示的に指定することもできます。
前述のホームスキーマは、必ず同じ名称のユーザが所有者になります。SAP HANAデータベースでは、所有者を変更する機能はありません。

1.3. ユーザ削除に伴って削除される対象
下表は、ユーザー削除に伴い削除対象となる代表的な項目をまとめたものです。
削除対象は大きく「スキーマ/オブジェクト」と「権限/ロール」の2種類に分類できます。
オプション「Restrict」の場合、削除対象となるのは基本的に「権限/ロール」側のみであり、「スキーマ/オブジェクト」について特別な考慮は不要であることが分かります。
一方で「Cascade」の場合は、「スキーマ/オブジェクト」と「権限/ロール」のどちらにも影響が及ぶため、両方を確認・対応する必要があります。

2.削除対象への対応:権限/ロール編
2.1. 権限の確認
本項では、削除対象の権限/ロールの確認方法について説明します。
SAP HANAデータベースの標準機能ではユーザやロールをエクスポートすることはできないため、移行が必要な場合は、ここで確認した内容をもとに移行先で権限の再設定をする必要があります。
SAP Note 2555718 – How to Import/Export users/roles in HANA
SQL文から確認します。下記のSQL文を使用することで、ユーザの権限 / ロールの一覧が表示されます。
① 削除対象ユーザに付与されている権限/ロールを確認するSQL
権限 : SELECT * FROM SYS.GRANTED_PRIVILEGES WHERE GRANTEE = ‘<削除対象ユーザ名>’;
ロール:SELECT * FROM SYS.GRANTED_ROLES WHERE GRANTEE = ‘<削除対象ユーザ名>’;
② 削除対象ユーザがほかのユーザに付与した権限/ロールを確認するSQL
権限 : SELECT * FROM SYS.GRANTED_PRIVILEGES WHERE GRANTOR = ‘<削除対象ユーザ名>’;
ロール: SELECT * FROM SYS.GRANTED_ROLES WHERE GRANTOR = ‘<削除対象ユーザ名>’;

3.削除対象への対応:スキーマ/オブジェクト編
3.1. オブジェクトの確認
本項では、削除対象のスキーマ/オブジェクトの確認方法について説明します。
SQL文から確認します。下記のSQL文を使用することで、スキーマ / オブジェクト一覧が表示されます。
① 削除対象ユーザが所有しているスキーマ/オブジェクトを確認するSQL
SELECT * FROM SYS.OWNERSHIP WHERE OWNER_NAME = ‘<削除対象ユーザ名>’;
② 削除対象スキーマに格納されているオブジェクトを確認するSQL
SELECT * FROM SYS.OBJECTS WHERE SCHEMA_NAME = ‘<削除対象スキーマ名>’;

3.2. オブジェクトの移行(エクスポート/インポート)
本項では、削除対象のスキーマ / オブジェクトの移行方法について説明します。
冒頭でお話したRISE移行のように、ユーザを削除する必要はあるが、ユーザの所有するオブジェクトは削除したくないケースがあります。
この際の対応として、SAP Noteでは以下の2パターンが紹介されています。
SAP Note 2705458 – Error “can’t drop without CASCADE specification” When Deleting User
(A) 新しいテーブルを作成し、削除するテーブルから新しいテーブルに insert … select を実行
(B) 削除するスキーマをエクスポートし、別のスキーマとしてインポート
今回はオブジェクトの種類を問わず、一括で移行可能な(B)の手順を紹介します。
■ エクスポート手順
① 以下のSQLで、作業ユーザにEXPORTシステム権限を付与します。
GRANT EXPORT TO “<作業ユーザ名>”;
その他、必要に応じて当該ユーザに必要な権限を付与します。
・エクスポートするオブジェクトに対する権限
→TABLE、VIEW、SEQUENCE、GRAPH WORKSPACE:SELECT権限
→PROCEDURE、FUNCTION:EXECUTE権限
・対象のスキーマに対するCREATE TEMPORARY TABLE権限

② 以下のSQLで、スキーマ全体をエクスポートします。
EXPORT “<スキーマ名>”.”*”
AS BINARY
INTO ‘<エクスポート先のパス><ファイル名>’
WITH REPLACE
THREADS <スレッド数>;
■ インポート手順
① 必要に応じて、以下のSQLでインポート先のスキーマを作成します。
CREATE SCHEMA <スキーマ名> OWNED BY <所有者ユーザ名>;
② 以下のSQLで、スキーマをインポートします。
IMPORT “<スキーマ名>”.”*”
AS BINARY
FROM ‘<エクスポート先のパス><ファイル名>’
WITH IGNORE EXISTING
THREADS <スレッド数>
RENAME SCHEMA “<元々のスキーマ名>” TO “<新スキーマ名>”;
③ スキーマ/オブジェクトの中身を確認し、正常にインポートされていることを確認します。
4.参考リンク
Delete a User | SAP Help Portal
DROP USER Statement (Access Control) | SAP Help Portal
Schema | SAP Help Portal
EXPORT Statement (Data Import Export) | SAP Help Portal
IMPORT Statement (Data Import Export) | SAP Help Portal
SAP製品の導入・移行・運用保守に関して、お気軽に相談下さい。
レイエントシステムではSAP製品の新規導入からシステム移行、運用保守までご対応します。
<お問い合わせ>