GRANT
異なるオブジェクトのsは別々です。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------
dirのモードrw-------
、ファイルのモード)。他の誰もディレクトリをリストして、ファイルが存在することを確認できません。
ファイル(mode rw-r--r--
)に対する全ユーザーの読み取り権限を付与しても、ディレクトリのアクセス許可を変更しない場合、違いはありません。ディレクトリを一覧表示する権限がないため、ファイルを読んで誰も見ることができませんでした。
代わりにrwx-r-xr-x
ディレクトリを設定し、ユーザーがディレクトリを一覧表示してトラバースできるが、ファイルのアクセス許可を変更できないように設定すると、ユーザーはファイルを一覧表示できますが、ファイルへのアクセス権がないため、ファイルを読み取ることができません。
実際にファイルを表示できるようにするには、両方の権限を設定する必要があります。
ページで同じこと。テーブルUSAGE
などSELECT
からオブジェクトに対してアクションを実行するには、スキーマ権限とオブジェクト権限の両方が必要です。
(たとえ、PostgreSQLにはまだ行レベルのセキュリティがないため、アナロジーは少し低下します。そのため、ユーザーは直接SELECT
からINGを実行することで、スキーマにテーブルが存在することを「確認」できますpg_class
。ただし、同じではないのは単なる「リスト」部分です。)
CREATE EXTENSION
。Linuxで作成されたファイルの問題は多かれ少なかれ同じですsu
。sudo -e
pqslにある種のforステートメントがあるとよいでしょう。