1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

grant usageしていないスキーマが表示されてしまったと思ったら仕様通りだった話

Last updated at Posted at 2023-06-15

Redshiftクラスター内にユーザを作成してDBeaverで接続したところ、左側のDB一覧にgrant usageしていないスキーマが表示されて焦るということがありました。
以前Redshiftのクエリエディターv2で同様のことをしたときは、grant usageしていないスキーマは一覧に表示されなかったと記憶していたため、挙動確認を行いました。

前提条件

  • Redshiftクラスター構築時に作成した管理者ユーザawsuserでRedshiftクラスターに接続し、create user test_user password xxxxx;を実行します。
  • Redshiftクラスターには、以下のDB・スキーマ・テーブルがあるものとします。
    image.png

挙動確認

接続

DBeaverとクエリエディターv2を使い、test_userでRedshiftクラスターに接続します。

DB一覧を確認

左側のDB一覧を展開して、どのスキーマとテーブルが表示されるか確認します。

DBeaverの場合

grant1.png
AWSの公式ドキュメントには「デフォルトでは、PUBLIC スキーマに対して、すべてのユーザーが CREATE および USAGE アクセス許可を持ちます。」という記載があります。(※1)
そのため、grant usageをしていないtest_userでログインするとpublicスキーマだけ表示されて、publicスキーマ配下のテーブルやschema1は表示されないことを期待していたのですが、publicスキーマ配下のテーブルとschema1、schema1配下のテーブルが表示されてしまいました。
さらに、おそらくRedshift構築時に自動的に作成されたであろうcatalog_historyというスキーマも表示されています。

クエリエディターv2の場合

image.png
こちらは期待通りpublicスキーマだけが見えています。publicスキーマ配下のテーブルは0になっているので、これも期待通りです。

システムカタログpg_namespaceを確認

test_userでログインした際に表示された情報はDBeaverとクエリエディターv2で異なりましたが、クライアントツールによってアクセスできる範囲が異なることはないはずです。
なので、それぞれのクライアントツールでスキーマ一覧の情報を持っているpg_namespaceにアクセスした際は何が表示されるか確認するため、select * from pg_namespace;を実行します。

DBeaverの場合

grant2.png
test_userがシステムカタログのpg_namespaceに対してアクセスできるか確認したところ、問題なくアクセスできてschema1が一覧に表示されました。

クエリエディターv2の場合

grant4.png
クエリエディターv2の場合もpg_namespaceにアクセスできて、出力内容はDBeaverと同じでした。
左側のDB一覧に表示されなくても、pg_namespaceにアクセスすると全てのスキーマの存在が確認できますね。

システムカタログpg_tablesを確認

pg_namespaceと同じく、pg_tablesにアクセスした際は何が表示されるか確認するため、select * from pg_tables;を実行します。

DBeaverの場合

grant3.png
test_userはpg_tablesにもアクセスできて、public_1_tableとschema1tableの存在が確認できました。

クエリエディターv2の場合

grant5.png
クエリエディターv2の場合もpg_tablesにアクセスできて、出力内容はDBeaverと同じでした。
pg_namespaceと同様、左側のDB一覧に表示されなくても全てのテーブルの存在が確認できます。

結論

Redshiftでは、そのスキーマに対してgrant usageを実行していないユーザであっても、pg_namespaceやpg_tablesにアクセスすることができ、どのようなオブジェクトが存在するかは知ることができるようです。
そしてusage権限がないテーブルをDB一覧に表示するか否かはクライアントツールによって異なるようですね。
使い慣れていないDBeaverの挙動に焦ってしまいましたが、どのような動きをするか確認できてよかったですw

参考資料

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?