postgres=# /c skytf skytf You are now connected to database "skytf" as user "skytf". skytf=> grant connect on database skytf to skytf_select; GRANT skytf=> grant usage on schema skytf to skytf_select; GRANT skytf=> grant select on all tables in schema skytf to skytf_select; GRANT
备注:给查询帐号 skytf_select 赋权,注意以上给的权限。
1.4 测试
1 2 3 4 5 6 7 8 9 10 11 12
skytf=> /c skytf skytf_select; You are now connected to database "skytf" as user "skytf_select".
skytf=> select * From products limit 1; ERROR: relation "products" does not exist LINE 1: select * From products limit 1; ^ skytf=> select * From skytf.products limit 1; id | json ----+-------------------------------------------------------------- 1 | {"type":"television", "price": 899.99, "resolution":"1080p"} (1 row)
skytf=> /c skytf skytf_select; You are now connected to database "skytf" as user "skytf_select". skytf=> show search_path; search_path ---------------- "$user",public (1 row)
备注:当前的搜索模式有两个,首先是 $user,即和用户名同名的模式;第二个为 public 模式。
2.2 更改 skytf_select 用户 search_path
1 2 3 4
skytf=> /c skytf postgres; You are now connected to database "skytf" as user "postgres". skytf=# alter role skytf_select set search_path to skytf,public; ALTER ROLE
备注:注意上面的命令,没设置好就达不到实验效果。
2.3 再次查看当前 search_path
1 2 3 4 5 6 7
skytf=# /c skytf skytf_select; You are now connected to database "skytf" as user "skytf_select". skytf=> show search_path; search_path --------------- skytf, public (1 row)
备注:search_path 已经包括 skytf 模式了,下面看看不加模式名是否可以找到表。
2.4 测试
1 2 3 4 5 6 7 8 9 10 11
skytf=> select * from products limit 1; id | json ----+-------------------------------------------------------------- 1 | {"type":"television", "price": 899.99, "resolution":"1080p"} (1 row)
skytf=> select * from skytf.products limit 1; id | json ----+-------------------------------------------------------------- 1 | {"type":"television", "price": 899.99, "resolution":"1080p"} (1 row)