我已经通过了numerousotherposts(仅举几个例子),但还是被卡住了。配置非常简单,我将详细介绍所有配置,但我认为只有以下几项与此相关:
在Ubuntu 16.04上,我以用户postgres的身份运行psql
,创建了数据库qedadmin,其中有3个表:网络,设备和设置;还有一个序列关系networks\
我正在使用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/postgres
的qedadmin数据库的访问权限。在
我还编辑了配置文件(/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。不完全是一个“解决方案”的行动,所以我不添加它作为一个答案。。。在
目前没有回答
相关问题 更多 >
编程相关推荐