如何在基于Web的应用程序中设置PostgreSQL用户帐户

4
我正在开发一个基于Web的应用程序,使用PostgreSQL作为后端数据库,Perl处理脚本。
我将登录信息保存在一个单独的文件中,类似于这里的建议where to store global database connection parameters,因此根据脚本需要实现的功能,它可以指向不同的登录凭据。目前是默认的PostgreSQL帐户,这显然需要更改。
我需要了解如何在PostgreSQL中设置用户帐户。
我认为我需要两个帐户,一个允许用户查询数据库,例如web_user,另一个需要提交更改,例如web_admin。
web_admin帐户需要登录网页。
在pgAdmin或命令行中,我该如何创建登录Rolls并授予所需的权限?
编辑请澄清:
我尝试创建了两个帐户,但不确定这是否是正确的方法。
CREATE USER web_user PASSWORD 'password1';
GRANT SELECT to web_user on Table1;   // Read Only
CREATE USER web_admin PASSWORD 'password2';
GRANT SELECT,INSERT,UPDATE,DELETE to web_admin on Table1;        // Read Insert and update / delete rows within a existing table but not able to create, alter or delete a Table  or column

编辑2 哎呀

我在pgAdmin窗口中执行了以下操作

 CREATE USER web_user PASSWORD 'password1';
 GRANT SELECT to web_user in schema PUBLIC;   // Read Only

 CREATE USER web_admin PASSWORD 'password2';
 GRANT SELECT,INSERT,UPDATE,DELETE to web_admin in schema PUBLIC

网页用户账户只允许对数据库进行读取操作,问题是网页管理员账户也有同样的读取权限。

我已经尝试通过删除网页用户并撤销权限来解决问题:

revoke all privileges on database mydb from web_admin;

但是它失败了,出现了关于依赖项的错误,列出了mydb中的所有表。
我试图查看web_admin实际拥有哪些权限,但未能成功。
我该如何删除这个账户?
grant web_user语法有什么问题?

1
这里有大量关于如何创建角色的信息:http://www.postgresql.org/docs/9.1/static/sql-createrole.html。 - Lucas
你是否考虑过使用像Dancer这样的框架来进行开发?我不能保证该特定框架的可靠性,因为我只使用Python和Django,但是使用框架通常可以减少很多痛苦,并降低代码不安全的可能性。 - cms_mgr
1个回答

3
要创建用户,您可以在SQL中使用CREATE USER命令。(它与CREATE ROLE ... WITH LOGIN相同) 然后使用GRANT授予权限。
我不确定您所说的“默认PostgreSQL帐户”的意思。如果您指的是“postgres”帐户,则是超级用户,并具有对所有内容的权限。
权限和安全保护的主题非常复杂,我至少写过一次相关内容:
  1. 如何在 PostgreSQL < 9.0 中授予所有表的权限
  2. 如何在 PostgreSQL > 9.0 中授予所有表的权限
  3. 如何保护您的数据库

好吧,这打开了一个全新的痛苦世界!你能看一下我的编辑并告诉我我的理解是否正确吗?谢谢。 - Holly
我看了你的帖子,但在我的情况下,作为超级用户执行远程登录是不太可能的。我正在使用pgAdmin访问DB服务器,以直接访问psql,他们需要远程登录到服务器,但只有系统管理员才能访问。我对此感到非常困惑,怀疑我搞砸了。请参见第二次编辑。 - Holly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接