我在生产系统中已有一个正在运行的postgres安装。我需要创建新表。我创建了表,并尝试与用户一起使用PHP使用的表。
my_user_1701usr@pg01cid1701db01 ERROR: permission denied for relation lstats_2019
好的。那讲得通。我没有定义任何默认权限,所以也许我必须将权限授予用户:
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public to my_user_1701usr;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public to my_user_1701usr;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public to my_user_1701usr;
因此,请重试:
my_user_1701usr@pg01cid1701db01 ERROR: permission denied for relation lstats_2019
嗯。还是行不通。但为什么?用户“ theusername”是数据库的所有者。此外,我向该用户授予了所有可能的权限。我什至尝试指定表格:
grant all on tablename to my_user_1701usr;
但是,即使我将表的所有者设置为现有用户,它仍然无法正常工作。所以我想:也许该用户以某种方式损坏并创建了一个新用户:
create user my_user_new with password 'test';
现在我得到了错误:
password authentication failed for user "my_user_new"
我尝试了不同的解决方案:
alter role my_user_new password 'md5herethehash'; -- md5 is configured in pg_hba.conf
alter role my_user_new encrypted password 'md5herethehash';
但是我仍然遇到相同的错误:
password authentication failed for user "my_user_new"
现在我不知道了。较旧的用户可以连接,但是我无法访问新表,尽管该用户是数据库和表的所有者,并被授予了所有可能的权限。新创建的用户无法使用我可以在Google上找到的任何方法连接到数据库。
我还检查了postgres日志本身。但是它们只包含与PHP进程日志相同的信息。我不知道如何进行。你有什么主意吗?
现在谢谢!
最好的问候
mschop
编辑1: 根据要求:Postgres版本:90514
编辑2:
“ \ dn + public”的输出:
Name | Owner | Access privileges | Description
--------+-----------------+------------------------------------+------------------------
public | my_user_1701usr | my_user_1701usr=UC/my_user_1701usr+| standard public schema
| | =UC/my_user_1701usr |
“ \ dp public.lstats_2019”的输出:
Schema | Name | Type | Access privileges | Column privileges | Policies
--------+-------------+-------+-----------------------------------------+-------------------+----------
public | lstats_2019 | table | my_user_1701usr=arwdDxt/my_user_1701usr | |
(1 row)
更新:
我刚刚删除了表,并在my_user_1701usr用户而不是postgres下重新创建了这些表。似乎现在可以工作。但是我不明白为什么。所以我把这个问题留待解决。