Greenplum中对表批量授权

说明

  本文描述问题及解决方法同样适用于 腾讯云Snova云数仓

背景

  DBA在管理数据仓库的时候,往往会创建多个帐号,每个帐号有不同的用途。因此这里就有不同帐号间表授权的需求。

  对单个表授权,可以使用 GRANT ALL ON TABLE {tablename} TO {username},那如果需要批量操作某个schema下所有表权限呢?

  在PostgreSQL 9.0之后,可以使用类似GRANT ALL ON ALL TABLES IN SCHEMA {schemaname} TO {username}完成上述功能。由于Snova目前基于PostgreSQL 8.3.23,还不支持上述语法(后续会升级到9.+,敬请期待!)。但可以通过手动编写函数,来实现类似语法。

方法

创建以下函数,语法可参见PL/pgSQL语法

create or replace function grant_on_all_tables(schema text, usr text) 
returns setof text as $$ 
declare 
   r record ; 
   grantstmt text; 
begin 
   for r in select * from pg_class c, pg_namespace nsp 
       where c.relnamespace = nsp.oid AND c.relkind='r' AND nspname = schema 
   loop 
     grantstmt = 'GRANT SELECT ON "'|| quote_ident(schema) || '"."' || 
quote_ident(r.relname) || '" to "' || quote_ident(usr) || '"'; 

     EXECUTE grantstmt; 
     return next grantstmt; 
   end loop; 
end; 
$$ language plpgsql; 

  简单解释一下以上代码,该函数接受2个参数,schema text : 需要授权的schema名称,usr text : 需要授权的role名称,然后代码会遍历参数schema下的所有表,轮询的去做授权操作。

  运行以上代码,就可以使用如下语法完成对某个schema下所有表的授权

select grant_on_all_tables('schema_name','user_name');

注意

  • Snova中函数可见性是数据库内,因此如果要在其它数据库使用该函数,还需要在该数据库内运行上述代码
  • 该函数只会对当前schema下的表进行授权,授权后创建的表还需要再次进行操作

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏抠抠空间

MySQL之库操作

一、库的简介 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等 per...

2785
来自专栏狂码一生

linux下压缩与解压命令大全

.tar      解包:tar xvf FileName.tar     打包:tar cvf FileName.tar DirName (注:tar是打包,...

4698
来自专栏Python爬虫实战

MySQL从零开始:03 基本入门语句

在上一小节中介绍了 MySQL 数据库的安装,接下来终于可以动手操作数据库了。本节内容介绍 MySQL 数据库的一些基本操作当做开胃菜。

771
来自专栏个人随笔

MySQL 关于存储过程那点事

存储例程是存储在数据库服务器中的一组sql语句,通过在查询中调用一个指定的名称来执行这些sql语句命令. 简介 SQL语句需要先编译然后执行,而存储过程(Sto...

4438
来自专栏小怪聊职场

MySQL(一)|性能分析方法、SQL性能优化和MySQL内部配置优化

6789
来自专栏维C果糖

史上最简单的 MySQL 教程(二十二)「数据的高级操作 之 更新 & 删除」

此外,在删除记录的过程中,如果表中存在自增长的主键,那么删除之后,自增长不会还原。执行如下 SQL 语句,进行测试:

3508
来自专栏java达人

PostgreSQL中的Schema

一个数据库包含一个或多个命名的模式,模式又包含表。模式还包含其它命名的对象,包括数据类型、函数,以及操作符。同一个对象名可以在不同的模式里使用而不会导致冲突;...

2139
来自专栏GreenLeaves

Oracle 锁机制

本文参考自:ORACLE锁机制 1、oracle是一个多用户使用的共享资源,当多个用户并发的操作同一数据行时,那么在oracle数据库中就会存在多个事务操作统一...

2269
来自专栏逸鹏说道

SQL Server 阻止了对组件“xp_cmdshell”的 过程“sys.xp_cmdshell”的访问。。。

今天在创建数据库的时候突然发现,xp_cmdshell的存储过程不能用了,网上一搜,发现大部分都是只关闭安全配置,然后就有了下文 ? 代码:具体的看注释,值得一...

3088
来自专栏Danny的专栏

【MyBatis框架点滴】——mybatis插入不显示,但是主键自增了?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

1432

扫码关注云+社区

领取腾讯云代金券