[解決済み] GRANT USAGE ON SCHEMAとは具体的に何をするのですか?
質問
初めて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" の部分だけなのです)。
関連
-
アプリケーションから DB2 SQL Error が報告され続けます。SQLCODE=-302, SQLSTATE=22001, SQLERRMC=null, DRIVER=4.17.29
-
CMakeのエラーを解決する。ソースディレクトリ "*" には、CMakeLists.txt が含まれていないようです。
-
MySQL cumsum(累積)の実装
-
[解決済み] MySQLデータベースの名前を素早く変更する(スキーマ名を変更する)方法は?
-
[解決済み] PostgreSQLデータベースへのSQLダンプのインポート
-
[解決済み】「INNER JOIN」と「OUTER JOIN」の違いは何ですか?
-
[解決済み】redisデータベースをあるサーバーから別のサーバーに移動するにはどうすればいいですか?
-
[解決済み] NoSQLデータストアを使用して、どのようなスケーラビリティの問題が発生しましたか?[クローズド]
-
[解決済み] PostgreSQLでタイムスタンプを自動更新する方法
-
[解決済み] 複数のデータベースをそれぞれ1つのスキーマで使用するのと、1つのデータベースを複数のスキーマで使用するのと、どちらが良いですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MYSQL "Access denied; you need (at least one of) SUPER privilege(s) for this operation" 問題解決
-
mysql reports Access denied; you need (at least one of) SUPER privilege(s) for this operation
-
MySQLデータベースのクエリ機能を使用する際に、グループ関数の使用が無効である問題の解決方法
-
INSERT EXEC文は入れ子にできません。
-
SQL SERVER データベース SELECT INTO および INSERT INTO の使用法(テンポラリテーブルへのデータ挿入を含む)
-
mongodbの更新操作の更新
-
Oracleデータベースの挿入データエラーです。ORA-06550
-
mysql import error [Err] 1273 - Unknown collation: 'utf8mb4_0900_ai_ci'.
-
SQLSERVER エラーのリターンコードの意味一覧表
-
mysqlのエラーです。1406, データが長すぎてカラムに入りません