2020年11月13日金曜日

データベースビューの機能を特定のユーザにだけ使用可能にする

以前紹介したデータベースビューの機能だが、どういうわけかSystem Definitionの配下のメニューとなっている。つまりデフォルトだとadminでないと使用できない。

まぁ定義の内容によってはかなりの負荷をかけてしまう可能性もあるのである程度絞るのはやむを得ないが、ユーザからのデータ抽出要望が多岐にわたってくると、正直一人で全部対応するのはつらくなってくる。

ある程度DBの知識や細かい集計が必要なユーザには公開してしまった方が良い場面もありそうなので、限定的に公開するようにしてみたい。

まず今回はある程度範囲を絞る想定なので専用のロールを作ることにする。

User Administration -> Roles でNew 次のように定義しseve。名前は仮に「dbviewuser」とした。

次にSystem Security -> Usersでいつものabel.tuterを開く。先ほどの dbvieuser を追加しておく。+データがいろいろ見られないとデータベースビューのテストとしてはつらいのでITILも付けておく。

これで下準備は整った。次にまずフィルタナビゲータでの表示をできる様にする。

こちらの記事を参考に、System Definition -> Application Menus からSystem Definitionの定義を探して開き、ModulesからDatabase Views の定義を見つける。


開いたらRolesにdbvieuser を追加しOverride application menu roles をチェックしUpdate。


これでメニューは表示されるようになったはず。Impersonateして確認。

当然ながらこのままではメニューが出ただけでテーブルへの一切の権限は未設定のため「Security constraints prevent access to requested page」となる。

Impersonateを終了し、次はテーブルへの書き込み権限を設定する。

System Devinition -> Tables からDatabase Viewsのテーブルである、sys_db_view の定義を探す。


Database View のレコードを開き、Security Adminへ昇格。画面下部のAccess Controlsを編集していく。

sys_cb_view.* write のエントリを開き、次のように Requires role に dbviewuser を追加し保存する。


sys_cb_view create, sys_cb_view read, sys_cb_view delete, sys_cb_view write の各エントリについても同様にRequires role に dbviewuser を追加し保存する。(画面省略)


この状態でこの状態でabel.tuterにImpersonateして確認してみると、Newボタンが表示されデータベースビューが作成できるようになっている様に見えるのだが、実際使うにはさらに、 sys_db_view_table sys_db_view_table_field の2テーブルにもアクセス権限の設定が必要となる。

それぞれ設定する。操作は sys_db_view と変わらないのでこちらも省略。


設定が終わったら、abel.tuterにImpersonateして確認してみる。

まずNewボタンが表示されデータベースビューが作成できるようになっている。

データベースビューの作成方法はこちらの記事で紹介しているが、とりあえず次の通りに定義してみる。

保存したらTry It。無事意図した通りの結果が出せた。

注意事項としてはこの設定をしたところで、もともとユーザに権限のないテーブルを組み込んだビューは作れないという事と、冒頭にも触れたが作り方によってはかなり負荷の高いビューも出来うるので、Servicenowの管理者にふさわしくある程度データベースの基礎知識を持ってるユーザに限定して公開する事にしたい。

また、本記事ではユーザに直接ロールを付与しているが、管理がつらくなることが色濃く予想されるので、基本的にはグループにロールを付与し、ユーザには直接ロールを付与しない運用をお勧めしたい。


0 件のコメント:

ウェブサイトのURLにおけるトレイリングスラッシュの解釈と有無による動作の違い

インターネットが現代社会におけるコミュニケーションの基盤となっている今日、ウェブサイトのURLはビジネスや個人ブランディングにとって重要な役割を果たしています。URLは単にウェブページへの経路を示すだけでなく、SEO(検索エンジン最適化)においても重要な要素です。この記事では、U...