Postgresql Can';无论发生什么,都无法获取关系的权限
我已经尽了一切努力为postgres中的某些关系获取用户权限。以下是我尝试过的:Postgresql Can';无论发生什么,都无法获取关系的权限,postgresql,Postgresql,我已经尽了一切努力为postgres中的某些关系获取用户权限。以下是我尝试过的: 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
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:
>>> conn = psycopg2.connect(host="localhost", port="5432", dbname="mydb",user="myuser", password="mypassword")
>>> cur = conn.cursor()
>>> cur.execute('select count(*) from mytable')
这就是我得到的错误:
>>> 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
当然还有重新启动。您是否在
mydb
中指定了所有者myuser
?
这是解决问题的简单方法:
创建数据库mydb所有者myuser代码>因此,根据答案,我可以通过为一个表单独授予访问权限来获得访问权限,我想这将与每个表有关
仍然不知道为什么会这样
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;
似乎有一些更改默认权限的变体。就我而言
ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES TO myuser;
没有工作。我还必须包括模式
:
-- change PUBLIC to appropriate schema
ALTER DEFAULT PRIVILEGES IN SCHEMA PUBLIC GRANT ALL ON TABLES TO myuser;
在得到错误之前,您执行什么命令?架构中的表是公共的吗?当你连接到psql时,你能以usermyuser
的身份访问它吗?或者它可能位于搜索路径上的不同模式中?它可能不在公共模式中。我怎么才能把它弄进去?当我执行\l
时,它是我从shell postgres默认用户创建的一个数据库,我让它进入sudo su postgresql
。。。也不确定psql中模式和数据库之间的区别…实际上,我的表是public.mytable,所以我相信它在public模式中。这不是必需的第一条语句会给你必要的权限。我怀疑您在创建表之前发布了这些声明。那么第一条语句就没有任何效果,因为它只影响已经存在的表。但是第三条语句应该考虑将来创建的表——除非发布它的用户与运行CREATE TABLE
的用户不同(在这种情况下,您需要为运行CREATE TABLE
的用户someuser
使用子句)。这是我能想到的唯一解释。你的服务器是什么版本的postgreSQL?
-- change PUBLIC to appropriate schema
ALTER DEFAULT PRIVILEGES IN SCHEMA PUBLIC GRANT ALL ON TABLES TO myuser;