Postgresql

為什麼新使用者可以從任何表中進行選擇?

  • August 5, 2014

當我在 Postgres 中創建使用者時,

create user test with password 'test';

使用者最終能夠連接到實例中的每個數據庫。使用者還可以從任何表中進行選擇:

# psql -h localhost testdb test
Password for user test: *****
psql (8.4.20, server 9.1.13)
WARNING: psql version 8.4, server version 9.1.
        Some psql features might not work.
Type "help" for help.

testdb=> select * from testtable;
id
------------
     1
(1 row)

\l數據庫列表顯示testdb有空Access privileges。那麼為什麼一個新創建的使用者可以連接到那個數據庫呢?

新創建的“test”使用者還可以從表中選擇數據。為什麼他可以在沒有特權的情況grant下這樣做?select

我想創建一個只能連接到一個數據庫並且只能從某些視圖中讀取的使用者。如何防止使用者直接從表中讀取?

要解決為什麼 test 可以SELECT從沒有 a 的表中的問題GRANT,這是因為您沒有顯式執行REVOKE從 連接到數據庫的能力PUBLIC,然後顯式GRANT為您的test使用者執行:

REVOKE connect ON DATABASE testdb FROM PUBLIC;
GRANT connect ON DATABASE testdb TO test;

完成後,您將REVOKE SELECT為該數據庫中的使用者提供您希望阻止使用者訪問的表和其他項目,然後顯式訪問GRANT SELECT視圖。

請注意,此處的使用者也可以是角色,然後可以添加多個使用者。

引用自:https://dba.stackexchange.com/questions/73010