2017-03-02 11 views
0

私はポストグルでいくつかのリレーションシップに対するユーザー権限を得るためにすべてを試しました。ここで私が試したものです:関係に関係なくパーミッションを取得できません

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO myuser; 
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO myuser; 
ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES TO myuser; 
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO myuser; 

私はこれに私のpg_hba.cnfを変更しました:

# TYPE DATABASE  USER   ADDRESS     METHOD 

# "local" is for Unix domain socket connections only 
local all    all          trust 
# IPv4 local connections: 
host all    all    127.0.0.1/32   trust 
# IPv6 local connections: 
host all    all    ::1/128     trust 
# Allow replication connections from localhost, by a user with the 
# replication privilege. 
#local replication  postgres        peer 
#host replication  postgres  127.0.0.1/32   ident 
#host replication  postgres  ::1/128     ident 

私はあなたが右の彼らと周りいじるならば、これらのコマンドは何かを確信しているが、なぜこれらのコマンドのいずれも、彼らが言うことに近いところでは何もしませんか?

私が使用しているのpython:もちろんの

ALTER DATABASE mydb OWNER TO myuser; 

して再起動し、私も試してみました

>>> cur.execute('select count(*) from public.mytable') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
psycopg2.ProgrammingError: permission denied for relation mytable 

>>> conn = psycopg2.connect(host="localhost", port="5432", dbname="mydb",user="myuser", password="mypassword") 
>>> cur = conn.cursor() 
>>> cur.execute('select count(*) from mytable') 

これは私が取得していますエラーです。

+0

エラーが発生する前に、どのコマンドを実行しますか? –

+0

スキーマ 'public'のテーブルはありますか? 'psql'で接続すると' myuser'というユーザとしてアクセスできますか? –

+0

明らかに:スキーマ公開では 'mytable'ですか?または、それはおそらくsearch_path上の別のスキーマにありますか? –

答えて

0

mydbにOWNER myuserを割り当てましたか? それはあなたの問題を解決するための簡単な方法です:

CREATE DATABASE mydb OWNER myuser;

+0

これは不要です –

0

this答えごとに、私は私が各テーブルで行う必要がありますねこれは、テーブルごとに個別に付与することによってアクセスを取得することができたので。

なぜこれが機能するのかまだわかりません。

GRANT ALL PRIVILEGES ON TABLE mytable TO myuser; 

これらはそうではなかった。

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

最初のステートメントは必要な権限を与えていました。私はあなたがテーブルを作成する前に*これらのステートメントを発行したと思う。最初のステートメントは、すでに存在するテーブルにのみ影響するため、何の効果もありません。しかし、3番目のステートメントは、将来作成されるテーブルを扱っていたはずです - それを発行したユーザーが 'CREATE TABLE'を実行したユーザーとは異なるユーザーである場合を除きます(この場合、' FOR USER someuser 'CREATE TABLE'を実行しているユーザと)。それが私が思いつく唯一の説明です。 –

+0

あなたのサーバはどのバージョンのpostgreSQLですか? – moooeeeep

関連する問題