这似乎比*更适合这里,所以这里:
我一直在使用mysql一段时间以来,因为在大多数便宜的虚拟主机上,它是提供的数据库.但是,现在我开始认真开发Web应用程序,我一直在本地使用postgresql作为我的数据库,以便在我感到舒服时在客户端安装上正确使用它.
我唯一没有掌握的(当然是基础知识)是用户/组/权限的概念.在mysql中,我创建用户,我可以授予他们对我希望他们有权访问的各种表的权限.
这个概念在Postgres中如何运作?可以?在我的本地机器上,我一直允许用户apache访问我的表,以便我的django应用程序可以工作,通过:
echo "GRANT SELECT,INSERT,UPDATE,DELETE ON TABLE $table TO $2"
echo "GRANT SELECT,INSERT,UPDATE,DELETE ON TABLE $table TO $2" | psql $1
echo "GRANT SELECT,UPDATE ON SEQUENCE ${table}_id_seq TO $2"
echo "GRANT SELECT,UPDATE ON SEQUENCE ${table}_id_seq TO $2" | psql $1
(更大的脚本的一部分)
这样安全吗?我非常肯定每个应用程序用户听起来像一个更明智的想法,但后来我不知道.
所以,我猜这会引起我的疑问:
>用户/组/权限如何在postgresql中运行?
>他们如何与mysql相比?
>什么是最佳做法?
解决方法:
postgres中没有用户和组(> 8.2?),只有ROLE
,角色可能会或可能无法登录.这并不重要,因为CREATE USER和CREATE GROUP只是CREATE ROLE的别名.
正如@ Peter Eisentraut所说,这段代码应该可以正常工作.
我在这方面注意到的一些更大的差异,除了Postgres使用Roles而不是用户之外,Postgres使用ident对用户进行数据库身份验证的方式允许系统用户通过系统用户访问没有密码的数据库 – > posgres用户映射,为什么默认情况下映射它们是否相同.有关身份验证的更多信息,请参阅the auth method documentation.
就表权限而言,据我所知,它们非常接近.但是,您可以在postgres中使您的权限更加精细.现在,在postgres中,您甚至可以使用GRANT
将用户限制为特定列,在某些即将推出的版本中,它应该能够按行限制数据库用户.
我绝对建议通过不同的用户/数据库限制来限制不同的应用程序,虽然你也可以使用SCHEMA
而不是数据库,但是如果你拥有一个模式,你可以修改其中的任何内容,所以它不是很精细.
任何最佳实践可能都取决于您的应用程序,实际上您应该阅读文档并找出最适合该应用程序的内容.