• 售前

  • 售后

热门帖子
入门百科

postgresql 赋权语句 grant的准确利用阐明

[复制链接]
墙和鸡蛋 显示全部楼层 发表于 2021-10-26 13:24:40 |阅读模式 打印 上一主题 下一主题
  1. grant select on all tables in schema public to username;
复制代码
此句是有效的复制语句
PG中有schema的概念,
以下的语句就是不行

网上得来终觉浅,错误比力多,还是要本身试试才行。
增补:postgresql关于访问视图需要的权限
某个用户访问一个视图,这个用户需要具备这个视图的schema的usage和这个视图本身的select权限,假如视图的基表来自其他schema,大概还需要其他schema的usage权限(根据postgresql改造的redshift发现了此题目),但是这个用户不需要视图对应基表的select权限
假如基表被修改了或重修了,需要把基表重新赋权给视图的owner,否则视图无法收效,但是不需要把基表授权给需要访问视图的用户,比如视图view1的owner是viewowner,一个用户user1有访问view1的权限,一旦view1的基本table1被重修了,需要把基表table1的权限重新赋给viewowner,但是不需要把table1的权限重新赋给uers1
案例1:
用户u2访问s2.view1,用户u2只需要s2的usage权限和s2.view1的select权限,而不需要s2.view1基表s1.table1的select权限和对应schema s1的usage权限
  1. t1=# \c
  2. You are now connected to database “t1” as user “postgres”
  3. t1=# \dns
  4. List of schemas
  5. Name | Owner
  6. --------±---------
  7. public | postgres
  8. s1 | postgres
  9. s2 | postgres
  10. (3 rows)
  11. t1=# create user u1 password ‘123456';
  12. CREATE ROLE
  13. t1=# create user u2 password ‘123456';
  14. CREATE ROLE
  15. t1=# grant all privileges on schema s1 to u1;
  16. GRANT
  17. t1=# grant all privileges on schema s2 to u1;
  18. GRANT
  19. t1=# \c - u1
  20. You are now connected to database “t1” as user “u1”.
  21. t1=> create table s1.table1(hid int);
  22. CREATE TABLE
  23. t1=> create view s2.view1 as select * from s1.table1;
  24. CREATE VIEW
  25. t1=> \c - u2
  26. You are now connected to database “t1” as user “u2”.
  27. t1=> select * from s2.view1;
  28. ERROR: permission denied for schema s2
  29. LINE 1: select * from s2.view1;
  30. t1=> \c - postgres
  31. You are now connected to database “t1” as user “postgres”.
  32. t1=# grant usage on schema s2 to u2;
  33. GRANT
  34. t1=# \c - u2
  35. You are now connected to database “t1” as user “u2”.
  36. t1=> select * from s2.view1;
  37. ERROR: permission denied for view view1
  38. t1=> \c - postgres
  39. You are now connected to database “t1” as user “postgres”.
  40. t1=# grant select on s2.view1 to u2;
  41. t1=# \c - u2
  42. You are now connected to database “t1” as user “u2”.
  43. t1=> select * from s2.view1;
  44. hid
  45. (0 rows)
复制代码
案例2:
redshift数据库,用户lukes访问cl_crm.v_account,用户lukes不但需要cl_crm的usage权限和cl_crm.v_account的select权限,还需要cl_crm.v_account基表对应schema的usage权限,但是不需要基表raw_wam.ibdwsurvey、raw_c3.ibdwsurveyinfo的select权限
创建用户lukes,并授权用户拥有视图cl_crm.v_account对应schema的usage权限
  1. create user lukes password ‘X123_x123'
  2. grant usage on schema cl_crm to lukes
复制代码
lukes用户查询cl_crm.v_account视图报错
  1. select * from cl_crm.v_account limit 1
  2. Amazon Invalid operation: permission denied for schema raw_wam;
  3. 1 statement failed.
复制代码
对用户lukes授权usage在视图基表对应的schema上
  1. grant usage on schema raw_wam to lukes
  2. grant usage on schema raw_c3 to lukes
复制代码
lukes用户查询cl_crm.v_account视图继续报错
  1. Amazon Invalid operation: permission denied for relation v_account;
复制代码
对用户lukes授权访问视图的select权限
  1. grant select on table cl_crm.v_account to lukes
复制代码
lukes用户查询cl_crm.v_account正常了
cl_crm.v_account视图语句是
  1. CREATE or replace view cl_crm.v_account as with userids as (
  2. select distinct su.ibsu_userid from raw_wam.ibdwsurvey su
  3. left join raw_c3.ibdwsurveyinfo si …)
复制代码
以上为个人经验,盼望能给各人一个参考,也盼望各人多多支持草根技能分享。如有错误或未考虑完全的地方,望不吝赐教。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作