我正在尝试向几张桌子上的用户授予只读访问权限。
这是我到目前为止所做的:
postgres=# CREATE ROLE myuser LOGIN PASSWORD 'mypassword';
CREATE ROLE
postgres=# GRANT CONNECT ON DATABASE mydb TO myuser;
GRANT
我尝试过的测试(无效):
postgres=# GRANT SELECT ON TABLE mytable TO myuser;
ERROR: relation "mytable" does not exist
postgres=# GRANT SELECT ON TABLE mydb.mytable TO myuser;
ERROR: schema "mydb" does not exist
postgres=# GRANT SELECT ON TABLE public.mytable TO myuser;
ERROR: relation "public.mytable" does not exist
postgres=# GRANT SELECT ON TABLE mydb.public.mytable TO myuser;
ERROR: cross-database references are not implemented: "mydb.public.mytable"
我所依赖的资源:
https://tableplus.io/blog/2018/04/postgresql-how-to-create-read-only-user.html https://www.postgresql.org/docs/current/sql-grant.html
我不理解缺少了什么,因为我遵循了这些文章,我的逻辑是指定表在哪个数据库中,但未提及。
我也已经检查了StackOverflow上的类似问题,但是步骤与我上面提到的资源相同。
(我不知道它是否相关,但我使用的是PostgreSQL 9.6)
我们将不胜感激!
============
编辑:当我运行\ d命令
时postgres=# \d
No relations found.
postgres=# select current_database();
current_database
------------------
postgres
(1 row)
我让postgres用户拥有所有特权,但也许我应该与自己的用户建立联系?
答案 0 :(得分:0)
为了指定对特定表的权限,必须连接到相关数据库。
您可以使用\connect
或\c
命令连接到数据库。
以下工作:
postgres=# \connect mydb
postgres=# GRANT SELECT ON TABLE mytable TO myuser;
有用的命令:
验证您当前的数据库:select current_database();
检查可用关系:\d
感谢@a_horse_with_no_name指出错误。