41から始めました

文字通り41歳から始めたブログです。DB(MySQL)を使ってお仕事してるので、DB周りの話を中心に最近始めたこととかをTwitterのノリで書いています。なお、本サイトにおいて示されている見解は私個人の見解であり、所属団体や組織を代表するものではありません。

Re:dashの権限設定について

以下の話はRedash 6.0.0+b8537の話です。 新しくなったら変わっててほしいところです。

ユーザーごとの権限設定したい

先に言っておくと、

画面からすべてはできません

画面からできること

  • ユーザーを作ること
  • グループを作ること
  • グループとユーザーを紐づけること

この3つのみ

ちなみに、ユーザーに直接権限を付与することはできない。 グループと言われるデータベースでいうロールのようなものに権限を付与して、 それと結び付けるという流れになる。

ところが、である。

上に書いたとおり、グループとユーザーを紐づけることはできるが、 グループに権限を与えたりグループから権限を減らしたりすることは画面からできない。 グループを作るとdefaultという権限が付与されているが、これが結構強い。

  • create_dashboard
  • create_query
  • edit_dashboard
  • edit_query
  • view_query
  • view_source
  • execute_query
  • list_users
  • schedule_query
  • list_dashboards
  • list_alerts
  • list_data_sources

とあって、字面で分かると思うがダッシュボードやクエリを作る権限もあるのでゲストユーザーを作って、 それには見せるだけにしたいというときにちょっとdefaultでは強すぎる。 (あとこれにadmin,super_adminってのもあるけどそれはdefaultの話ではないのでいったん横に置いとく)

権限をグループに付与するには?

コマンドラインでre:dashのグループ、グループ権限を設定してみる の記事を参考にして付与すればいい。

ただし、docker時はどうなの?ということでそこだけちょっと補完。 ユーザー、グループ、その結び付けまでは画面上で行ったものとする (いずれもguestという名前で作った場合)

dockerでのredash権限変更手順

1. rootユーザーでredash serverのコンテナに入る

通常redashユーザで入ることになっちゃうので、

docker exec -it --user root [redash serverのコンテナ名] bash

2. ユーザー一覧表示

bin/run ./manage.py groups list

次のような結果が返ると思う。

Id: 1
Name: admin
Type: builtin
Organization: default
Permissions: [admin,super_admin]
Users: administrator
--------------------
Id: 2
Name: default
Type: builtin
Organization: default
Permissions: [create_dashboard,create_query,edit_dashboard,edit_query,view_query,view_source,execute_query,list_users,schedule_query,list_dashboards,list_alerts,list_data_sources]
Users: administrator
--------------------
Id: 3
Name: guest
Type: regular
Organization: default
Permissions: [create_dashboard,create_query,edit_dashboard,edit_query,view_query,view_source,execute_query,list_users,schedule_query,list_dashboards,list_alerts,list_data_sources]
Users: guest
--------------------

guestグループの権限はdefaultグループのそれと同じであり、これだとguestユーザーの権限が強すぎる。

3. グループへの権限付与(はく奪)

bin/run ./manage.py groups change_permissions --permissions <付与パーミッション> <グループ名ID>

で適切な権限を対象グループに付与する

たとえばこんな感じ(guestグループにはcreate_dashboard,create_query,edit_dashboard,edit_queryの4権限を使わせない)

bin/run ./manage.py groups change_permissions --permissions view_query,view_source,execute_query,list_users,schedule_query,list_dashboards,list_alerts,list_data_sources 3

4. ユーザー一覧表示(変更後)

bin/run ./manage.py groups list

次のような結果が返ると思う。

Id: 1
Name: admin
Type: builtin
Organization: default
Permissions: [admin,super_admin]
Users: administrator
--------------------
Id: 2
Name: default
Type: builtin
Organization: default
Permissions: [create_dashboard,create_query,edit_dashboard,edit_query,view_query,view_source,execute_query,list_users,schedule_query,list_dashboards,list_alerts,list_data_sources]
Users: administrator
--------------------
Id: 3
Name: guest
Type: regular
Organization: default
Permissions: [view_query,view_source,execute_query,schedule_query,list_dashboards,list_alerts,list_data_sources]
Users: guest
--------------------

権限についてはこれで終わりだが…

実はもう一ヵ所触っておかないといけないところがある。 グループのデータソース(Data Sources)である。 Re:dashを使う場合、DB等のデータソースを参照しているはずで、グループを新設した場合ここが空になっている。 これは画面からできるので、 Settings>Groups>[グループ名]>Data Sourcesタブを選択し、 Add Data Sourceをクリックして適当なデータソースを選んで設定してあげる必要がある。

ここまで できたら完了

作ったユーザーで他人が作ったpublishになっているダッシュボードも見えるようになっているはず。

愚痴っぽいこと

権限くらい画面で制御できるようにしてほしいわ。 あと、グループが削除できないのはごみが増えてツライ。