とあるエンジニアの作業ブログ

Analytics BI Data Analytics Tableau

Tableau Onlineのログインユーザーごとにデータ参照先を変更する方法

投稿日:

Tableau Online でログインユーザーごとにそのユーザーの権限に応じてデータ参照範囲を動的に制御するという実装を行った。
Tabluau 用語で言う行レベルセキュリティというやつ。

日本語でわかりやすく説明ドキュメントがなくて意外と困ったのでメモ。

実現したいこと

丁寧に説明しなくても伝わると思うが、要は一つのテーブルに部署コードごとに複数部署のデータが格納されておりそれを Tableau で参照させる際に、ログインユーザーの所属部署以外のデータは見させたくないよというお話。

部署コード 取引番号 摘要 金額 補足
somu-bu 123456 パソコン購入代金 100,000 ←総務部しかこのデータは見れない
keiri-ka 234567 会計システムライセンス 800,000 ←経理課しかこのデータは見れない

方式は2つ

いろいろ調べた結果、方式は以下の2つ。

  1. ユーザーフィルタを使ってログインユーザー(もしくはグループ)と参照データ範囲を紐付ける
  2. フィルタ用のセキュリティフィールド(参照範囲を制御するテーブル)を使って制御

それぞれの参考URLは以下。
ユーザー フィルターを作成し、パブリッシュ用にセキュリティで保護する
データでセキュリティ フィールドを使用して動的フィルターを作成する

ユーザーフィルタを使った方式

Tableau にはユーザーフィルタという専用機能があって、これでTableau Online(もしくは Server )のログインユーザーと参照データをぽちぽち手動で紐づけることでログインユーザーごとのデータ参照範囲を動的に制御できる。

参考
ユーザーフィルタ

今回の場合は、

  • 総務部ユーザー ===> somu-bu にチェック
  • 経理課ユーザー ===> keiri-ka にチェック

したユーザーフィルタを作成(フィルタを2つ作るのではなく一つのユーザーフィルタでそれぞれのユーザーごとに設定する)し、そのユーザーフィルタをフィルタペインに配置すればOK。

この方式のメリットとしては、ユーザー/グループで制御が可能な点だろうか。
デメリットとしてとにかくメンテナンス性が悪いということだろう。
また、移行性についても、テスト環境と本番とでユーザー情報を完全一致させないとそのまま移行もできないため、ある一定規模を超えると現実的に適用は難しい。

フィルタ用のセキュリティフィールドを使った方式

今回の実装でもこちらの方式を採用したが、データを参照するテーブルとは別に参照範囲を制御するテーブルを用意してフィルタするという方法。

部署コード ユーザーネーム 補足
somu-bu somu-bu.user1@******.jp 総務部ユーザー1
somu-bu somu-bu.user2@******.jp 総務部ユーザー2
keiri-ka keiri-ka.user1@******.jp 経理課ユーザー1
keiri-ka keiri-ka.user2@******.jp 経理課ユーザー2

上記が参照範囲制御用のテーブルの例。
これを元テーブルに左外部結合する(当然ですが JOIN KEY の設計は元テーブルに合わせて都度ちゃんとやる必要があります。)

部署コード 取引番号 摘要 金額 ユーザーネーム 補足
somu-bu 123456 パソコン購入代金 100,000 somu-bu.user1@******.jp 総務部ユーザー1
somu-bu 123456 パソコン購入代金 100,000 somu-bu.user2@******.jp 総務部ユーザー2
keiri-ka 234567 会計システムライセンス 800,000 keiri-ka.user1@******.jp 経理課ユーザー1
keiri-ka 234567 会計システムライセンス 800,000 keiri-ka.user2@******.jp 経理課ユーザー2

次に、Tableau 側で計算フィールドを作成します。

USERNAME() = [ユーザーネーム]

わざわざ説明しなくてもわかると思いますが、USERNAME()関数はログインユーザー名を返す関数です。
よってログインユーザーと [ユーザーネーム] カラムの値が一致していれば、この計算フィールドは True を返します。

参考までに「somu-bu.user1@******.jp」でログインした時の各行の真偽の値は以下のようになります。

部署コード 取引番号 摘要 金額 ユーザーネーム 補足 True/Flase
somu-bu 123456 パソコン購入代金 100,000 somu-bu.user1@******.jp 総務部ユーザー1 True
somu-bu 123456 パソコン購入代金 100,000 somu-bu.user2@******.jp 総務部ユーザー2 Flase
keiri-ka 234567 会計システムライセンス 800,000 keiri-ka.user1@******.jp 経理課ユーザー1 False
keiri-ka 234567 会計システムライセンス 800,000 keiri-ka.user2@******.jp 経理課ユーザー2 False

あとはこの計算フィールドをフィルターペインに追加して True でフィルタすれば、「somu-bu.user1@******.jp」でログインした時には1番上の行しか表示されなくなります。

メンテナンス性に対する考察

長々と2つの方式について説明してきましたが、ぶっちゃけ方式について書きたかった訳ではありません。

今回悩んだのはメンテナンス性(保守性)でした。(というか大体そうだと思いますが。)

部署異動とか普通に起こるので、その度にメンテ依頼がきたら発狂しそうになりますし、GUIで手動でぽちぽちとかマジ勘弁。
そう考えると、ユーザーフィルタの方式は選択肢にはなり得ませんでした。

一応ユーザー部門でもメンテできるように良心的なUIを備えた運用ツールを作って上げて、バックエンドでAPI叩いてメンテするかとかも考えたのですが、そもそもユーザーフィルタをメンテするAPIが無いようです。(Tableau のDeveloper Community で確認済み)
そうなってくると、事前にグループとデータ参照範囲の関係を定義したユーザーフィルタを作って、部署異動の度にユーザーとグループの紐付けだけメンテするかとかも考えましたが、結局新規の部署ができたりするとめんどくさかったり、万一ユーザーフィルタ自体をメンテする時には手メンテとなり作業ミスが怖いのでやめました。

で、セキュリティフィールドを使った方式を採用した訳ですが、こっちはこっちでユーザー単位の制御になるのでテーブルメンテ大変だなーと思い悩みました。
(まぁユーザー部門にExcelかなんかでやってもらった奴を一括インポートするだけなんですが)

うまいことユーザーをグループにまとめて、ログインユーザーのグループに応じてセキュリティフィールドで制御できないかと調べたんですができなさそうです。
この記事ができそうな雰囲気を醸し出しているのですが、"<group name>"のところがリテラル文字列しか設定できず、「動的フィルタじゃないじゃん!」と思い「???」ってなりました。
ここ「ホントか!?」って思っているのでもっと詳しい方いたら教えて欲しいです。

で、参照ユーザーが増える度にテーブルメンテ依頼がくるのもうざいので、Gドライブに配置したスプシを日次バッチで取り込んでテーブル洗い変えるバッチ処理を組んでユーザー部門にメンテを丸投げしました。(一応なんかあった時のためにバックアップとかの対応はちゃんとした上で)

そんなこんなでそれぞれの方式のメリデメまとめるとこんな感じですかねー。

方式 メリット デメリット 適用するなら
ユーザーフィルタ
  • 手軽。ユーザー部門でもできそう
  • グループで制御できる
  • 環境移行する場合は環境間でユーザー情報を合わせる必要がある
  • CLI/APIなどが無いためGUIメンテのみ
ユーザーフィルタ自体は予めグループ – データで作成しておき、ユーザーの追加・異動は極力ユーザーとグループの紐付けを変えることで吸収する
セキュリティフィールド
  • データメンテだけで権限制御できるので環境差異を吸収しやすく運用容易性も高い
  • グループを使った制御ができないので、ユーザーが増える度にデータメンテが必要
  • 件数にもよるが JOIN でレコードが増えるので性能劣化が気になる
権限制御テーブルの中身をエクスポートしたExcelなりをユーザー部と共有しておき、Excelメンテしたら自動で権限制御テーブルに取り込むようなバッチ処理を組んでおく。万が一テーブルぶっ壊された時のためにバックアップも何世代か残しておく。

-Analytics, BI, Data Analytics, Tableau
-,

執筆者:


comment

メールアドレスが公開されることはありません。

関連記事

筑波大学 佐久間 淳先生の機械学習講義の学習メモ ~ 第2回 重回帰 (1) ~

筑波大学 システム情報系教授 佐久間 淳先生の機械学習の講義を見て勉強したので学習メモ。 第3回 2. 重回帰 (1)。 用語メモ Bag of Words 文章中に含まれる単語で one-hot-v …

『統計学が最強の学問である』を読んで自分用メモ

西内啓さんの「統計学が最強の学問である」を読んで自分用のメモ。 自分用なのでかなり偏ってます。 目次 データをビジネスで使うための「3つの問い」 サンプリング収集したデータが十分であるかどうかを検証す …

筑波大学 佐久間 淳先生の機械学習講義の学習メモ ~ 第2回 重回帰 (2) ~

筑波大学 システム情報系教授 佐久間 淳先生の機械学習の講義を見て勉強したので学習メモ。 第3回 2. 重回帰 (2)。 用語メモ 高次局所自己相関特徴(HLAC)  角度や位置などによって認識精度が …

筑波大学 佐久間 淳先生の機械学習講義の学習メモ ~ 第1回 機械学習概論と単回帰 (2) ~

筑波大学 システム情報系教授 佐久間 淳先生の機械学習の講義を見て勉強したので学習メモ。 第2回 1. 機械学習概論と単回帰 (2)。 用語メモ 平均二乗誤差 一つのデータに対する Error(誤差) …

Pythonほぼ初心者が作る画像分類評価 ~多ラベル分類編~

Python初心者に毛が生えた程度の筆者が画像分類の評価をした時のお話。 ただのPython文法メモ的な。 目次 分類問題設定 動作環境 作った物 自分的文法メモ 分類問題設定 1000枚ぐらいある画 …

sidebartop_Ad