数仓项目中用户授权如何实现?

一、目的

为了使用户权限最小化,一般我都都会给数仓中的每一层创建不同的用户,授予其基本权限,保证数据正常流通即可,因此如何授权、授权如何漂亮的写出来就是这里要说的....

二、授权逻辑

这里结合数仓常用习惯,简单说下授权逻辑。
数仓中每一层的数据,由下到上,越加精简。每层的各个用户之见,只需要上层用户可以获取下层用户所拥有的数据即可。因此,我们在授权时,只需要上层用户去获取下层用户所拥有权限的部分即可,实现权限最小化...

三、实现方式

/*
这里我们以user_ods ---> user_dw ---> user_dm三个用户为例。
当我们想要授予user_dw用户user_ods的部分权限时,我们只需要将下面的存储过程在ods用户下执行,参数为user_dw即可...
*/
create or replace procedure prc_grant_user_permission(
	iv_user_name in varchar2
)
is
	vv_user_name varchar2(20);
begin
	vv_user_name := iv_user_name;
--对其他用户授予查询、修改表的权限
	for table_tmp in(select table_name from user_tables) loop
		execute immediate 'grant select,alter on '|| table_tmp ||' to '|| vv_user_name;
	end loop;
	
--对其他用户授予执行存储过程、自定义函数的权限
	for prc_tmp in(select object_name from user_procedure) loop
		execute immediate 'grant execute on '|| prc_tmp ||' to '|| vv_user_name;
	end loop;

--对其他用户授予同义词的权限
	for syno_tmp in(select synonym_name from user_synonyms) loop
		execute immediate 'grant execute on '|| syno_tmp ||' to '|| vv_user_name;
	end loop;
	
end;
/

--执行
exec prc_grant_user_permission('user_dw');
exec prc_grant_user_permission('user_dm');

--删除授权存储过程
drop procedure prc_grant_user_permission;

注意:

--当我们遇到需要进行权限传递时,我们仅需要将存储过程中的动态sql修改即可
--授权语句:grant select on 表名 to 某用户 with grant option;
--撤销权限:revoke 权限 to 用户;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值