我正在尝试将给定数据库的所有表的所有权限授予新的postgres用户(而不是所有者).似乎GRANT ALL PRIVILEGES在DATABASE my_db TO new_user;不这样做.成功运行所述命令后(作为postgres用户),我得到以下new_user:
$psql -d my_db my_db => SELECT * FROM a_table_in_my_db; ERROR: permission denied for relation a_table_in_my_db
两个问题:
1)如果没有授予my_db上所有表的所有权限,上面的命令会做什么?
您的问题的答案来自
online PostgreSQL 8.4 docs.
>授予DATABASE上的所有特权将数据库的CREATE,CONNECT和TEMPORARY特权授予角色(用户被正确称为角色).这些特权实际上都不允许角色从表中读取数据;该表需要表的SELECT权限.
>我不确定是否有一种“正确”的方式将所有表的所有权限授予角色.确保给定角色拥有表的所有权限的最佳方法是确保角色拥有该表.默认情况下,每个新创建的对象都由创建它的角色拥有,因此如果您希望角色拥有表的所有权限,请使用该角色创建它.
Postgresql 9.0引入了几乎所需的以下语法:
在SCHEMA public to new_user中授予所有表格的所有权限;
问题是如果您在默认的“公共”模式之外的模式中创建表,则此GRANT将不适用于它们.如果您确实使用非公共模式,则必须分别授予这些模式的特权.