我刚刚创建了一个新用户,我希望能够访问有限数量的公共表。用户已创建,我现在授予一个公共表的权限。然后我以该用户身份登录到数据库并尝试在用户应该能够访问的表上运行SELECT但我必须错过一个步骤或做错了什么,因为当我运行查询时我得到:
关系[table]不存在
以下是我按顺序采取的步骤。
CREATE USER pqb2b WITH PASSWORD 'foo'
select * from pg_user;
usename | usesysid | usecreatedb | usesuper | usecatupd | passwd | valuntil | useconfig
----------+----------+-------------+----------+-----------+----------+---- |
postgres | 10 | t | t | t | ******** | |
pgb2b | 17267767 | t | f | f | ******** | infinity |
(1行)
GRANT ALL on b_users to pgb2b;
SELECT
schemaname||'.'||tablename
FROM
pg_tables
WHERE
has_table_privilege (
'pgb2b',
schemaname||'.'||tablename,
'select'
)
AND
schemaname NOT IN (
'pg_catalog',
'information_schema'
);
public.b_users
(1 row)
~ postgres$ psql -U pgb2b mydb
psql (9.0.3)
Type "help" for help.
mydb=> select * from b_users;
ERROR: relation "b_users" does not exist
LINE 1: select * from b_users;
mydb=> \d+ b_users
Did not find any relation named "b_users".
答案 0 :(得分:17)
即使我向我的pgb2b用户授予权限,我忘了为该用户指定用法:
GRANT usage on schema public to pgb2b;
这解决了这个问题。我发现这个post关于设置PostgreSQL用户权限非常有帮助。
答案 1 :(得分:2)
对于可能会看到此内容的其他人,请注意,但它可能不适用于此特定问题 -
如果您未使用公共架构,则需要更新search_path
SET search_path TO my_schema, public;
信用:Why does PostgreSQL's \dt show only public schema tables?