您不仅应该授予数据库权限(CTc 表示用户可以连接到数据库并创建新数据库和临时数据库),还应该授予数据库对象权限。
授予角色
最简单的方法是将所有者角色授予phpuser 角色:
GRANT owner_role TO phpuser;
但是,这可能会带来各种安全问题,并且通常不建议在任何情况下使用,除非您对自己的网络安全非常有信心。
授予权限
现在是艰难的道路。
首先,您的phpuser 很可能不必创建新的或临时数据库,因此请撤销这些权限:
REVOKE CREATE, TEMP ON DATABASE mydatabase FROM phpuser;
如果您在 public 以外的架构中有表或其他对象,请授予对这些架构的访问权限(发出这些命令时,您需要连接到数据库 mydatabase):
GRANT USAGE ON SCHEMA myschema TO phpuser;
现在您可以为架构内的所有表、序列、函数等授予权限,因此对于每个架构,包括public,请执行以下操作:
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA myschema TO phpuser;
GRANT ALL ON ALL SEQUENCES IN SCHEMA myschema TO phpuser;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA myschema TO phpuser;
如果您有一些更奇特的对象,请使用the appropriate command。视图包含在表授权中,索引自动包含在表中。
网络访问
请注意,phpuser 角色也应该在pg_hba.conf 文件中被允许访问。应该有这样一行(修改以匹配您的网络配置):
host mydatabase phpuser 127.0.0.1/32 md5