除非用户设置超级用户

时间:2015-07-15 23:51:48

标签: php postgresql

我正在使用PHP来查询PostgreSQL数据库(PHP5,PostgreSQL 9.3.9)。我有一个拥有所有者的现有数据库。我正在尝试让次要用户拥有对PHP使用的数据库的完全访问权限。当此用户设置为SUPERUSER时,它可以查询数据库。否则他不能。我使用postgres超级用户为相关数据库授予用户所有权限:

GRANT ALL PRIVILEGES ON DATABASE mydatabase TO phpuser;

当我查看数据库列表时,访问权限上列出了phpuser = CTc。用户还设置了密码。

我错过了什么?我希望此用户通过PHP以完全权限访问数据库。

1 个答案:

答案 0 :(得分:1)

您不仅应该授予数据库权限(CTc表示用户可以连接到数据库并创建新数据库和临时数据库),还应该在数据库对象上。

授予权利

最简单的方法是将所有者角色授予phpuser角色:

GRANT owner_role TO phpuser;

但是,这可能会引入各种安全问题,除非您对网络安全性非常有信心,否则通常不建议用于任何方案。

GRANT权限

现在是艰难的。

首先,您的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