2016-08-22 31 views
1

這是我init.sql文件:爲什麼我仍然不能訪問PSQL中的任何數據庫函數?

DROP DATABASE IF EXISTS my_data; 
CREATE DATABASE my_data; 

DROP USER IF EXISTS u; 
CREATE USER u WITH PASSWORD 'secret'; 

GRANT ALL ON ALL TABLES IN SCHEMA public TO u; 
GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO u; 
GRANT ALL ON ALL FUNCTIONS IN SCHEMA public TO u; 

\c my_data; 

CREATE TABLE users (
    ID SERIAL PRIMARY KEY NOT NULL, 
    email VARCHAR NOT NULL DEFAULT '', 
    password VARCHAR NOT NULL DEFAULT '', 
    active SMALLINT NOT NULL DEFAULT '1', 
    created TIMESTAMP NOT NULL, 
    modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    salt VARCHAR NOT NULL DEFAULT '' 
); 

然後,如果我:

psql -f init.sql 

和..

psql -d my_data -U u 

my_data=> select * from users; 

ERROR: permission denied for relation users 

爲什麼,如果我只是給予它這個權限被拒絕?

更多信息

my_data=> \z users 
         Access privileges 
Schema | Name | Type | Access privileges | Column access privileges 
--------+-------+-------+-------------------+-------------------------- 
public | users | table |     | 
(1 row) 

回答

3

你只給了允許的架構,這是從表中分開。如果你想給表上的權限也可以使用

GRANT ALL ON ALL TABLES IN SCHEMA public TO u; 

請注意,如果你有序列或其他對象,他們也需要單獨的權限。

必須在之後設置由於已爲現有對象設置權限,因此已創建表。

如果要設置新對象的默認權限您可以使用

ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO u; 
+0

嗯..更新了我的關於張貼到您的答案添加所有補助,但仍同樣的錯誤。 – Trip

+0

'\ z用戶'告訴你什麼?同樣,你在什麼時候創建表格,因爲它沒有顯示在腳本上。 –

+0

用'/ z用戶'響應更新,並在OP – Trip

相關問題