我正在使用PHP来查询PostgreSQL数据库(PHP5,PostgreSQL 9.3.9)。我有一个拥有所有者的现有数据库。我正在尝试让次要用户拥有对PHP使用的数据库的完全访问权限。当此用户设置为SUPERUSER时,它可以查询数据库。否则他不能。我使用postgres超级用户为相关数据库授予用户所有权限:
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO phpuser;
当我查看数据库列表时,访问权限上列出了phpuser = CTc。用户还设置了密码。
我错过了什么?我希望此用户通过PHP以完全权限访问数据库。
答案 0 :(得分:1)
您不仅应该授予数据库权限(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