1. ホーム
  2. database

[解決済み] GRANT USAGE ON SCHEMAとは具体的に何をするのですか?

2022-04-23 12:41:19

質問

初めてPostgresのデータベースを作成しようとしています。だから、これはおそらく愚かな質問です。

PHPスクリプトからデータベースにアクセスする必要があるDBロールに基本的な読み取り専用権限を割り当てたのですが、不思議なことがあります。もし、私が

GRANT some_or_all_privileges ON ALL TABLES IN SCHEMA schema TO role;

は、これも実行する必要があるのでしょうか?

GRANT USAGE ON SCHEMA schema TO role;

から ドキュメント :

使用方法 スキーマの場合、そのスキーマに含まれるオブジェクトへのアクセスを許可します。 指定されたスキーマ(オブジェクト自身の特権を前提とする。 の要件も満たす必要があります)。基本的に、これは被許諾者が以下を行うことを可能にする。 スキーマ内のオブジェクトを検索します。

スキーマに含まれるあらゆるデータを選択または操作できれば、スキーマ自体のあらゆるオブジェクトにアクセスできると思うのですが、いかがでしょうか。私は間違っているのでしょうか?もしそうでないなら GRANT USAGE ON SCHEMA に使用されるのですか?また、ドキュメントにある "オブジェクト自身の権限要件も満たすと仮定する" とは具体的にどういう意味でしょうか?

どのように解決するのですか?

GRANT が別々のオブジェクトにある。 GRANT をデータベース上で使用することはできません。 GRANT は、その中のスキーマに権限を与えます。同じように GRANT は、スキーマ内のテーブルに対する権利を付与しません。

に対する権利を持っている場合 SELECT を含むスキーマで見る権利がない場合、そのテーブルにアクセスすることはできません。

権利関係のテストは順番に行われます。

Do you have `USAGE` on the schema? 
    No:  Reject access. 
    Yes: Do you also have the appropriate rights on the table? 
        No:  Reject access. 
        Yes: Check column privileges.

このような混乱は public スキーマにはデフォルトで GRANT ロールのすべての権利の public のメンバーであり、すべてのユーザー/グループが属しています。つまり、誰もがすでにそのスキーマを使用しているのです。

というフレーズがあります。

(オブジェクト自身の権限要件も満たしていると仮定して)

を持たなければならないと言っているのでしょうか? USAGE は、スキーマ内のオブジェクトを使用するために、スキーマ上で USAGE スキーマ上のオブジェクトを使用するには、スキーマ上のオブジェクトに対する権利だけでは不十分です。

ディレクトリツリーみたいなものですね。ディレクトリを作ると somedir というファイル somefile その中で、自分のユーザだけがディレクトリやファイルにアクセスできるように設定します (モード rwx------ ディレクトリの場合、モード rw------- を指定した場合)、他の誰もそのファイルが存在することを確認するためにディレクトリをリストアップすることができません。

もし、このファイルに世界読書権(モード rw-r--r-- しかし、ディレクトリのパーミッションは変更しないので、何も変わりません。誰も 見る を読むために、そのディレクトリをリストアップする権利を持っていないからです。

代わりに rwx-r-xr-x を設定し、ディレクトリの一覧と探索ができるようにしますが、ファイルのパーミッションを変更しないようにします。 リスト はできませんが 読む というのも、そのファイルにアクセスすることができないからです。

を設定する必要があります。 両方とも のパーミッションで、実際にファイルを見ることができるようになります。

Pgでも同じです。 両方のスキーマが必要です。 USAGE のように、オブジェクトに対してアクションを実行するための権利とオブジェクトの権利があります。 SELECT をテーブルから削除します。

(この例えは、PostgreSQLにはまだ行レベルのセキュリティがないため、ユーザがスキーマにテーブルが存在することを SELECT からのイング pg_class を直接表示します。しかし、彼らはそれと何ら対話することができないので、全く同じではないのは "list" の部分だけなのです)。