python psycopg2 postgresql:正在获取“关系设置的权限被拒绝”

2024-04-20 00:07:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经通过了numerousotherposts(仅举几个例子),但还是被卡住了。配置非常简单,我将详细介绍所有配置,但我认为只有以下几项与此相关:

在Ubuntu 16.04上,我以用户postgres的身份运行psql,创建了数据库qedadmin,其中有3个表:网络设备设置;还有一个序列关系networks\网络.networkId。在

我正在使用psycopg2编写一个python脚本,它需要在设置表上执行SELECT。许多例子都显示了以用户'postgres'的身份连接的脚本,这确实非常适合我。但是,我想最好是使用一个权限较低的用户来处理这类事情,所以我创建了一个带有密码的用户qedserver。在

在psycopg2连接字符串中使用这个新用户和密码以及localhost,我可以成功地获得一个连接和一个游标(如果我使用了错误的用户或密码值,连接就会失败,所以我知道定义的用户和密码以及python的身份验证都在工作)。但是,我对表settings执行SELECT语句的所有尝试都返回代码42501:permission denied for relationship settings。在

我最初只向userqedserver授予SELECT权限,并且只对表设置授予权限:

GRANT SELECT ON settings TO qedserver;

由于这不起作用,我逐步提升了权限,现在userqedserver拥有所有3个表、序列关系和数据库的所有权限:

^{pr2}$

但我仍然得到“关系设置权限被拒绝”。在

明确地说,只需将python脚本中的连接字符串从userpostgres更改为userqedserver的连接字符串,就可以区分成功和失败,所以我不提供python代码,因为我认为这是不相关的(但如果您认为有帮助的话,我可以这样做)。在

我错过了什么?在

编辑后添加:没有名为qedserver的linux用户;我认为不需要,但也许我错了?(进一步编辑:我只是做了这个实验,没有什么不同。)

更新:根据@klin的评论和链接,我可以看到所有的特权都已被成功授予:qedserver在网络设备设置表上拥有rwU权限,以及对networkid seq序列关系的rwU权限;和\l报告对=Tc/postgres + postgres=CTc/postgres + qedserver=CTc/postgresqedadmin数据库的访问权限。在

我还编辑了配置文件(/etc/postgresql/10/main/postgresql.conf在我的系统上)设置log_error_verbosity=VERBOSE,并向postgresql进程发送SIGHUP以重新读取配置文件。这在错误日志中添加了另一行(/var/log/postgresql/postgresql-10-主.log在我的系统上)对于每个失败的尝试;现在日志显示(新行是中间的一行):

qedserver@qedadmin ERROR:  42501: permission denied for relation settings
qedserver@qedadmin LOCATION:  aclcheck_error, aclchk.c:3410
qedserver@qedadmin STATEMENT:  SELECT * FROM settings WHERE deviceId = 10020;

我还能看到什么或试图取得进展吗?在

编辑4个月后添加:这一切都是为了一个新的项目,我认为使用postgresql是有好处的,因为一些原因;在开发的早期就遇到了这个问题,并且在几天内无法解决它,所以我放弃了,转而使用mysql。不完全是一个“解决方案”的行动,所以我不添加它作为一个答案。。。在


Tags: 用户网络脚本数据库权限编辑密码settings