Postgresql
為什麼新使用者可以從任何表中進行選擇?
當我在 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
視圖。請注意,此處的使用者也可以是角色,然後可以添加多個使用者。