Chinaunix首页 | 论坛 | 博客
  • 博客访问: 41673
  • 博文数量: 44
  • 博客积分: 21
  • 博客等级: 民兵
  • 技术积分: 315
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-22 02:38
文章分类
文章存档

2008年(44)

我的朋友
最近访客

分类:

2008-10-20 14:26:33

有点奇怪的是,把权限赋给一个数据库的时候,数据表的权限居然没有从数据库继承下来。如下:


  1. grant all privieges on database test_db to test_user;

 


查看test_db下的数据表权限,比如test_tbl表:


  1. \dp

 


发现test_tbl没有获得相应的权限。

postgresql又不支持同时对多个表赋值权限,无奈去找来一个辅助的函数,还真好用,如下:

  1. CREATE OR REPLACE FUNCTION pg_grant(usr text, prv text, ptrn text, nsp text)
  2.  
  3. RETURNS integer

  4. LANGUAGE plpgsql
  5.  
  6. AS $$
  7.  
  8. DECLARE
  9.  
  10. obj record;
  11.  
  12. num integer;
  13.  
  14. BEGIN
  15.  
  16. num:=0;
  17.  
  18. FOR obj IN SELECT relname FROM pg_class c
  19.  
  20. pg_namespace ns ON (c.relnamespace = ns.oid) WHERE

  21. relkind in ('r','v','S') AND
  22.  
  23. nspname = nsp AND
  24.  
  25. relname LIKE ptrn
  26.  
  27. LOOP
  28.  
  29. EXECUTE 'GRANT ' || prv || ' ON ' || obj.relname || ' TO ' || usr;
  30.  
  31. num := num + 1;
  32.  
  33. LOOP;
  34.  
  35. RETURN num;
  36.  
  37. ;
  38.  
  39. $$;

 

阅读(254) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~