注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

PostgreSQL:浅析 ACL 权限  

2013-06-03 10:44:34|  分类: Postgres基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

       在 PostgreSQL 维护过程中,表,视图的权限查看是很平常的工作,本文从一张视图的权限
开始,简单的介绍权限查看的几种方法。

一张视图
 [pg93@redhatB ~]$ psql francs francs
psql (9.3beta1)
Type "help" for help.

francs=> \d+ view1_test
                      View "francs.view1_test"
 Column |         Type          | Modifiers | Storage  | Description 
--------+-----------------------+-----------+----------+-------------
 id     | integer               |           | plain    | 
 name   | character varying(64) |           | extended | 
View definition:
 SELECT test_view1.id, 
    test_view1.name
   FROM test_view1;
 备注:假设系统有如上视图,如何查看这张视图的权限呢?大概有以下几种方法:
  

一 方法一: 通过 \dp 元子命令
 francs=> \dp view1_test
                               Access privileges
 Schema |    Name    | Type |   Access privileges   | Column access privileges 
--------+------------+------+-----------------------+--------------------------
 francs | view1_test | view | francs=arwdDxt/francs+
        |            |      | select_only=rw/francs
(1 row)
  备注:\dp 后接表名或视图名查看对像权限,个人推荐这种方法,因为简单,但要会看输出的格式。
             例如,什么是 "arwd...?" , 详见附一: ACL 权限列表。
      
二 方法二:通过 aclexplode 函数
--2.1 查看 acl
 francs=> select oid,relname ,relacl from pg_class where relname='view1_test';
  oid  |  relname   |                    relacl                     
-------+------------+-----------------------------------------------
 16492 | view1_test | {francs=arwdDxt/francs,select_only=rw/francs}
(1 row)
 备注: pg_class.relacl 输出实际上和 \dp 显示的值类似。

--2.2 解析 acl 权限
 francs=> select * From aclexplode('{francs=arwdDxt/francs,select_only=rw/francs}');
 grantor | grantee | privilege_type | is_grantable 
---------+---------+----------------+--------------
   16384 |   16384 | INSERT         | f
   16384 |   16384 | SELECT         | f
   16384 |   16384 | UPDATE         | f
   16384 |   16384 | DELETE         | f
   16384 |   16384 | TRUNCATE       | f
   16384 |   16384 | REFERENCES     | f
   16384 |   16384 | TRIGGER        | f
   16384 |   16496 | SELECT         | f
   16384 |   16496 | UPDATE         | f
(9 rows)
 备注:aclexplode 函数将 acl 转换成易读的格式。

--2.3 找到对应用户
 francs=> select oid,rolname from pg_roles where oid in (16384,16496);
  oid  |   rolname   
-------+-------------
 16384 | francs
 16496 | select_only
(2 rows)
  

三 方法三:查看 table_privileges
--3.1 查看 information_schema.table_privileges 
 francs=> select grantor,grantee,table_schema,table_name,privilege_type from information_schema.table_privileges 
francs-> where table_name='view1_test';
 grantor |   grantee   | table_schema | table_name | privilege_type 
---------+-------------+--------------+------------+----------------
 francs  | francs      | francs       | view1_test | INSERT
 francs  | francs      | francs       | view1_test | SELECT
 francs  | francs      | francs       | view1_test | UPDATE
 francs  | francs      | francs       | view1_test | DELETE
 francs  | francs      | francs       | view1_test | TRUNCATE
 francs  | francs      | francs       | view1_test | REFERENCES
 francs  | francs      | francs       | view1_test | TRIGGER
 francs  | select_only | francs       | view1_test | SELECT
 francs  | select_only | francs       | view1_test | UPDATE
(9 rows)
备注:上面格式简单多了,用户 select_only 对视图 view1_test 只有 SELECT,UPDATE 权限。


四 附 ACL 权限列表

 relacl Code Privilege Name 
 a INSERT
 r SELECT
 w UPDATE
 d DELETE
 D TRUNCATE
 x REFERENCES
 t TRIGGER
arwdDxt ALL
备注:建议牢记以上权限代码,才能完全看懂 \dp 输出。

五 参考
  评论这张
 
阅读(9303)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016