[SAP] S/4HANA 1909 SAP_ALLプロファイルから全照会権限ロールを作った


#はじめに

この記事は [chillSAP 夏の自由研究2020](https://note.com/chillsap/n/n66e12ef65d11/#zG72R) の記事として執筆しています。

SAPシステムを運用していく上で本番環境にあってほしいSAP全機能の照会ONLY権限。全機能を実行可能なSAP_ALLという権限プロファイルは有名ですが、それでは登録・更新・削除・実行・etcと何でもできてしまいます。そうじゃなくて欲しいのはただ照会のみの権限プロファイル。ところがそういったものが見当たりません。ググってもACTVT=03でどや！程度しか見つからない始末。
じゃあひとつ権限ロールとして作ってみよう、というのがこの記事です。

#この記事で書かれていること
SAP_ALLプロファイルをもとに作成した照会権限ロールの設定内容の考え方・作り方・権限ロールの実物です。
作成環境はS/4HANA 1909 FP02（2020/05リリース）です。


#対象読者
メインターゲットは「SAP_ALLの照会権限とかググってもACTVT=03にしろとしか出てこなくて、そーじゃないんだよなぁ」と考えている<b>ベーシス系コンサルタントの方々</b>です。ただ照会権限のACTVTに何を与えたのかは業務系の権限ロールにも跳ねる内容なので<b>業務系のコンサルタント・エンジニアにとっては参考</b>になると考えています。

#SAP権限の作成方法
標準機能で作るとマウスでポチポチ。1000をゆうに超える権限項目に対してポチポチ。。。
コンサルタントは体力勝負なところもありますが、これではさすがに腱鞘炎になります。
そう、SAP権限はホワイトリストを作成するが如く、許可する権限（技術的には権限オブジェクトと呼びます）を一つずつ付与していきます。また個々の要件に合わせて各権限オブジェクト配下にあるできることの詳細（権限項目と各項目の権限値）を設定します。

#筆者がこんな記事を出そうと思った理由
昔、この記事で書かれている手順を知らずにマウスでポチポチやって腱鞘炎になったからです。
知ってる・知らずでは身体への負担が大違い。ベーシス系で権限触る人は絶対マスターしたほうが良いのに、自分の周りで知らない人が多かったのです。

#SAPのアクティビティ権限項目（ACTVT）の値一覧
下表はS/4HANA 1909 FP02における各機能の操作に関わる権限値です。
「照会権限へ設定してよい値」は、責任取れないのですが（笑）「X」の入っている値を使います。
ぜひ参考にしてみて下さい。
いわゆる「03（照会）」だけでは照会権限と称するには足りず、変更文書やアーカイブ情報など参照できません。辛いですね。


|アクティビティ(技術名称)|テキスト（英語）|テキスト（日本語）|照会権限へ設定してよい値|
|---|---|---|---|
|01|Add or Create                 |追加または登録||
|02|Change                        |変更||
|03|Display                       |照会|X|
|04|Print, edit messages          |印刷、メッセージ編集||
|05|Lock                          |ロック||
|06|Delete                        |削除||
|07|Activate, generate            |有効化、生成||
|08|Display change documents      |変更文書照会|X|
|09|Display prices                |価格照会|X|
|0A|Check Documents for Process   |プロセスの文書のチェック||
|0B|Status Change in Substitute   |代理ユーザのステータス変更||
|10|Post                          |転記||
|11|Change number range status    |番号範囲ステータス変更||
|12|Maint.and gen.change document |変更伝票の更新および生成||
|13|Initialize number levels      |番号レベル初期化||
|14|Field select.:Generate screen |項目選択: 画面生成||
|15|Field select.:Assign table    |項目選択: テーブル割当||
|16|Execute                       |実行||
|17|Maintain number range object  |番号範囲オブジェクト更新||
|18|Deliveries from coll. proc.   |一括出荷処理||
|19|Invoices from coll. proc      |一括請求処理||
|20|Transport without translation |翻訳なしで移送||
|21|Transport                     |移送||
|22|Enter, Include, Assign        |入力、取込、割当||
|23|Maintain                      |更新||
|24|Archive                       |アーカイブ||
|25|Reload                        |リロード||
|26|Change customer account group |得意先勘定グループ変更||
|27|Display totals records        |全レコード照会|X|
|28|Display line items            |明細照会|X|
|29|Display saved data            |保存済データ照会|X|
|30|Determine                     |設定||
|31|Confirm                       |確認||
|32|Save                          |保存||
|33|Read                          |読込|X|
|34|Write                         |書込||
|35|Output                        |出力||
|36|Extended maintenance          |拡張更新||
|37|Accept                        |受入||
|38|Perform                       |実行||
|39|Check                         |チェック||
|40|Create in DB                  |DB に登録||
|41|Delete in DB                  |DB から削除||
|42|Convert to DB                 |DB に変換||
|43|Release                       |リリース||
|44|Flag                          |フラグ||
|45|Allow                         |許可||
|46|Merge                         |マージ||
|47|Borrow                        |借用||
|48|Simulate                      |シミュレーション||
|49|Request                       |依頼||
|50|Move                          |移動||
|51|Initialize                    |初期化||
|52|Change application start      |アプリケーション開始変更||
|53|Display application start     |アプリケーション開始照会|X|
|54|Display application archive   |アプリケーションアーカイブ照会|X|
|55|Change application archive    |アプリケーションアーカイブ変更||
|56|Display archive               |アーカイブ照会|X|
|57|Save archive                  |アーカイブ保存||
|58|Display takeover              |引継ぎ照会|X|
|59|Distribute                    |配信||
|60|Import                        |インポート||
|61|Export                        |エクスポート||
|62|Create automatic Ledger       |自動元帳作成||
|63|Activate                      |有効化||
|64|Generate                      |生成||
|65|Reorganize                    |再編成||
|66|Refresh                       |リフレッシュ||
|67|Translate                     |翻訳||
|68|Model                         |モデル||
|69|Discard                       |破棄||
|70|Administer                    |管理者||
|71|Analyze                       |分析||
|72|Plan                          |計画||
|73|Execute Digital Signature     |デジタル署名実行||
|74|Revoke approval               |承認取消||
|75|Remove                        |解除||
|76|Enter                         |入力||
|77|Pre-enter                     |事前入力||
|78|Assign                        |割当||
|79|Assign Role to Composite Role |集合ロールへのロールの割当||
|80|Print                         |印刷||
|81|Schedule                      |計画||
|82|Supplement                    |補足||
|83|Counterconfirm                |取引先確認||
|84|Settle                        |決済||
|85|Reverse                       |取消||
|86|Rebook                        |再予約||
|87|Return                        |リターン||
|88|Perform                       |実行||
|89|Force Posting                 |強制転記||
|90|Copy                          |コピー||
|91|Reactivate                    |再有効化||
|92|Create from Template          |テンプレートから登録||
|93|Calculate                     |計算||
|94|Override                      |上書き||
|95|Unlock                        |ロック解除||
|96|Reject                        |却下||
|97|Set                           |設定||
|98|Mark for release              |リリースマーク||
|99|Create Invoice List           |請求書一覧登録||
|A0|Receive                       |受信||
|A1|Accrue                        |利子||
|A2|Pay                           |支払||
|A3|Change status                 |ステータス変更||
|A4|Resubmit                      |再実行||
|A5|Display reports               |レポート照会|X|
|A6|Read with filter              |フィルタによる読込み|X|
|A7|Write with filter             |フィルタによる書込み||
|A8|Process mass data             |プロセス一括データ||
|A9|Send                          |送信||
|AA|Print Again                   |再印刷||
|AB|Settle                        |決済||
|AC|Change Outbound Status        |送信ステータス変更||
|AD|Change Inbound Status         |受信ステータス変更||
|AE|Change User-Defined           |ユーザ定義の変更||
|AF|Prompts                       |プロンプト||
|AG|Record                        |||
|AM|                              |||
|B1|Display permitted values      |有効値表示|X|
|B2|Complete Technically          |技術的完了||
|B3|Derive                        |派生||
|B4|Deactivate                    |無効化||
|B5|Display History               |履歴照会|X|
|B6|Create File                   |ファイル登録||
|B8|Execute Again                 |再実行||
|B9|Post Parked Document          |未転記伝票の転記||
|BD|Maintain obj. in non-OwnerSys.|非 OwnerSys のオブジェクト更新||
|BE|IMG projection                |IMG 計画立案||
|C1|Maintenance of payment cards  |支払カード更新||
|C2|Display of payment cards      |支払カード表示|X|
|C3|Maintenance of manual auth.   |マニュアル権限更新||
|C4|Close Out                     |処分||
|C5|Reopen                        |再開||
|C6|                              |||
|C8|Confirm change                |変更確認||
|CA|Create Ad Hoc Event           |アドホックイベント登録||
|CD|Change Drug                   |薬品変更||
|CN|                              |||
|CO|Complete                      |完了||
|CP|Change Planned Total Dose     |計画総投与量の変更||
|CS|Change Cash Flow Status       |キャッシュフローステータス変更||
|D1|Copy                          |コピー||
|D3|Detailed Display              |詳細表示|X|
|D4|Fulfill                       |履行||
|D5|Process                       |プロセス||
|D6|Cancel                        |中止||
|D7|Create AGR                    |AGR 登録||
|D8|Complete                      |完了||
|D9|Exit                          |終了||
|DD|Delete Draft                  |ドラフト削除||
|DE|                              |||
|DF|                              |||
|DG|Change Goal Contribution      |個別目標値変更||
|DI|Change Incentive              |インセンティブ変更||
|DL|Download                      |ダウンロード||
|DP|Delete plan                   |プラン削除||
|DR|Rel. frm Rej. When Elig. Fail |適格時の却下からのリリース失敗||
|E0|Save extract                  |抽出保存||
|E6|Delete own extracts           |自分の抽出削除||
|E7|Delete external extracts      |外部抽出削除||
|EC|Execution Without Check       |||
|EP|Prioritise extract            |抽出優先||
|EU|Execute Unit Tests            |||
|F1|Approve                       |承認||
|F4|Display in Value Help         |入力ヘルプで表示|X|
|FA|Cancel                        |中止||
|FB|Maintenance of Header Data    |ヘッダデータの更新||
|FP|Change customer field selectn |カスタマ項目選択変更||
|FS|                              |||
|G1|Maintain Budget               |予算更新||
|G2|Billing                       |請求管理||
|G3|Maintain Overhead Costs       |間接費更新||
|G4|Maintain Reevaluation         |再評価更新||
|G5|Pre-enter                     |事前入力||
|G6|Transfer Budget               |予算振替||
|G7|Reverse                       |取消||
|GL|General overview              |一般概要||
|H1|Deactivate                    |無効化||
|H2|Activate Logging              |ロギング有効化||
|H3|Deactivate Logging            |ロギング無効化||
|HD|Hold                          |保留||
|I1|Submit                        |送信||
|I2|Rebook                        |再予約||
|IA|Inactive                      |無効||
|KA|Activate notice               |通知有効化||
|KI|Knock In                      |ノックイン||
|KO|Knock Out                     |ノックアウト||
|KS|Reverse notice                |通知取消||
|KU|Give notice                   |解約通知||
|L0|All functions                 |全機能||
|L1|Function range level 1        |機能範囲レベル 1||
|L2|Function range level 2        |機能範囲レベル 2||
|LM|Change LDAP Mapping           |LDAP マッピングの変更||
|LS|Change LDAP Sync. Switch      |LDAP 同期化スイッチの変更||
|MA|Deactivate mod.assistant      |Mod. 割当無効化||
|MB|Exit                          |終了||
|MS|Schedule Task List            |タスクリストスケジュール||
|N1|Release DBC                   |DBC リリース||
|N2|Block and Release DBC         |DBC のブロックとリリース||
|N3|Validate DBC                  |DBC のチェック||
|N4|Reopen DBC                    |DBC 再オープン||
|N5|Process Rejected DBC          |拒否された DBC の処理||
|N6|Bill DBC Without Validating   |チェックなしで DBC 請求||
|N7|Process Special Dummy DBC     |特殊ダミー DBC の処理||
|N8|DBC Type Changes in Process   |処理中の DBC タイプ変更||
|NO|                              |||
|NP|                              |||
|O1|Overbook                      |オーバーブッキング||
|O2|Overbook Appt Always Possible |オーバーブッキングが常に可能||
|OA|OCS-AOF Functions             |OCS-AOF 機能||
|OC|                              |||
|OM|Call Surgery Monitor          |手術モニタ||
|ON|Create Secondary Surgery      |二次手術の登録||
|OP|Start Surgery                 |手術開始||
|OR|                              |||
|OV|Exit Material Entry Function  |品目入力機能の終了||
|P0|Accept CCMS CSM data          |CCMS CSM データ受領||
|P1|Edit CCMS CSM data            |CCMS CSM データ編集||
|P2|Maintain CCMS CSM methods     |CCMS CSM メソッド更新||
|P3|Register CCMS CSM remote systm|CCMS CSM リモートシステム登録||
|P4|Release Plan                  |計画リリース||
|PA|Open Period                   |期間オープン||
|PB|Close Period                  |会計期間締め||
|PC|Open Consolid. Grp Processing |連結グループ処理のオープン||
|PD|Close Consolid. Unit Processng|連結グループ処理のクローズ||
|PP|Set Productive                |本稼動設定||
|PQ|Propose                       |||
|PR|Process Correspondence        |連絡文書を処理||
|PS|                              |||
|PU|Publish                       |パブリッシュ||
|PZ|Personalize                   |パーソナライゼーション||
|RE|Restart                       |再実行||
|RF|                              |||
|RL|Reload                        |リロード||
|RO|Roll Out                      |ロールアウト||
|RS|Send to New Recipient         |新規受信者への送信||
|RT|Reset                         |リセット||
|S1|Edit template                 |テンプレート編集||
|S2|Edit specification            |仕様編集||
|SE|Search                        |検索|X|
|SK|Skip                          |スキップ||
|SO|Edit in Sourcing              |ソーシングの編集||
|SP|Exit                          |終了||
|ST|Start                         |開始||
|SZ|Assign Switch Framework Switch|切替フレームワークスイッチ割当||
|T0|Display Time Slots            |タイムスロット表示|X|
|T1|Maintain Time Slots           |タイムスロット更新||
|T2|                              |||
|T3|                              |||
|T4|                              |||
|T5|                              |||
|T6|                              |||
|T7|                              |||
|U2|Compare business volumes      |取引量比較||
|U3|Change business volume comp.  |取引量比較変更||
|U4|Add business volume data      |取引量データ追加||
|UL|Upload                        |アップロード||
|US|                              |||
|V1|Create version                |バージョン登録||
|V2|Change Version                |バージョン変更||
|V3|Display Version               |バージョン照会|X|
|V4|Delete Version                |バージョン削除||
|V5|Transport Version             |バージョン転送||
|V6|Delete Version Header         |バージョンヘッダ削除||
|VE|Create an Enhancement ID      |拡張 ID 登録||
|VF|Expired                       |期限終了||
|VP|VIP                           |VIP||
|W1|Debug                         |デバッグ||
|W2|External Start                |外部起動||
|W3|Enter Expunge Date            |抹消日入力||
|W4|Forward                       |フォワード||
|W5|Redo Role Resolution          |ロール決定のやり直し||
|W6|Start Workflows with Errors   |エラーのあるワークフロー開始||
|W7|Cancel Workflow               |ワークフロー中止||
|W8|Restart After Error           |エラー後再実行||
|W9|Workflow BRF+ Generation      |ワークフロー BRF+ 生成||
|WA|Configure Scenario            |シナリオ設定||
|WB|Edit Workflow Instance        |ワークフローインスタンス編集||

#他にも制御系の権限項目が...
上記のACTVTのみが動作制御を実施している権限項目ではありません。ERP6.0やS/4HANAを使っている人ならご存知SM36/SM37のジョブなんぞは、JOBACTIONという権限項目で制御されており、値は下表の通りです。他にも複数の権限項目があります。。。
これらの権限項目も変更することで、本当の照会権限を作ることができます。

|アクティビティ(技術名称)|テキスト（英語）|テキスト（日本語）|照会権限へ設定してよい値|
|---|---|---|---|
|DELE|Delete Background Jobs|バックグラウンドジョブ削除||
|LIST|Obsolete|無効|X|
|MODI|Modify Other Users' Jobs|他のユーザのジョブを修正||
|PLAN|Copy or repeat jobs.|ジョブをコピーまたは反復||
|PROT|Display Job Processing Log|ジョブ処理ログの照会|X|
|RELE|Release Jobs (Released Automatically When Scheduled)|ジョブのリリース (スケジュール時に自動リリース)||
|SHOW|Display Job Queue|ジョブキューの照会|X|


#作成方針
ACTVTだけでも90点は取れそうなので、上述の照会権限に付与しても良い値を設定していきます。
（実際に作る際には、ちゃんと各権限項目ごとに設定をポチポチやっていきましょう。やり方はACTVTと同じです。）
ロール名は「Y_BC_DISPLAY_ALL」とし、SAP_ALLからロールを生成して各権限項目の値を設定します。このあたりはTrCD:PFCGを触ったことのあるベーシスな方はご存知と思いますので飛ばします。問題はその先の手順ですので。

#権限項目に設定済みの権限値の一括置換
これが今回のキモです。ACTVTを例に権限値を一括置換する手順を記載します。他の権限項目も同様に置換できます。

1.TrCD:PFCGにて、予めSAP_ALLをテンプレートとして作成した「Y_BC_DISPLAY_ALL」をロールに入力した状態で、ユーティリティから「一括更新権限」を開きます。
<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529287/a072efe3-2bba-ff18-f6c4-22adacc97d3b.png">

2.オプションを設定します。記載している項目のみ触るようにして下さい。
■標準選択
ロール：Y_BC_DISPLAY_ALL
実行モード（そんなこと書いてないですが便宜上）：直接実行
■項目変更のタイプ
項目に対する権限の項目値の変更（オブジェクト非依存）
■項目に対する権限の項目値の変更（オブジェクト非依存）　※ここは項目変更のタイプの選択内容で変わります
変更：すべて置換
項目名：ACTVT
　※ここで「ACTVT」や「ACTION」のキーワードを使って、その他の権限項目を探します。
■オプション
すべてチェックを外す

<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529287/2ca873f8-a3b6-1718-6457-a72eea57a4ac.png">
（上図の続き）
<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529287/2dc60456-c121-cd4f-f595-f4c30a370c2f.png">

3.項目名の右にある「値」をクリックします。
<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529287/ece4266a-445b-2ece-fb52-2d192db35664.png">

4.上述の表に従って照会系の権限値を選択し、「保存」ボタンをクリックします。
<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529287/37708033-c106-d041-d933-8f4cb698846a.png">

5.実行します。
<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529287/1d6cbce9-536c-69db-0f76-3b944d9bf432.png">

6.変更結果が表示されるので「プロファイル生成」をクリックします。
画面下部にエラーログが出ていますが、「この権限オブジェクトに対しては"xx"という権限値は無効だよ」という意味のメッセージです。権限オブジェクトそれぞれのなかで、権限項目ACTVTで使用可能な権限値が決まっているので当たり前です。こちらとしては照会系の権限値として使える値を全部指定しているので、使えないものを無視してくれるのは狙い通りです。
他方、画面上部ではACTVT「*」が削られ新たに「03」が追加されていることが値比較・開始値の列から分かります。
<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529287/9dfec64f-98a2-bebb-6a66-97cb1cfb40a7.png">

7.プロファイル生成が完了したら、おしまいです。
<img width="450" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529287/7d6d34ee-5e47-7c05-17d3-fb734d49bf42.png">


#実物の権限ロール
実物の権限ロールのテキスト内容を貼ろうとしたら、なんとQiitaの文字数制限に引っかかってしまい貼れませんでした。
仕方ないのでGoogle Driveで共有します。
こちらは今回作成した権限ロールの実物です。TrCD:PFCGにてアップロードできます。
実は内容としては、ACTVT以外にも、XXX_ACTVTやXXX_ACTIONといった権限項目は一通り洗って照会権限にしています。ヤバそうな項目は「' '」と指定して無効化しています。
ただ、テストしてないのでそのまま使って何か起きても責任は取れませんのでご注意下さい。

こちらのリンクに「Y_BC_DISPLAY_ALL.SAP」を置いてます。
https://drive.google.com/file/d/10Q3tiDtmOk5ys4ZfDk6_DMPTvaNeYbIA/view?usp=sharing


#おわりに
若干の腱鞘炎になりました。
マウス操作の箇所、これでも多いですね（笑）
他にも何か書きたいことが出てきたら投稿します。

それでは！