【DWS】权限传递
【摘要】 【问题场景】--新建三个用户gsql -d postgres -p25308 -U dcq_test1 -W dcq52130... -rgsql -d postgres -p25308 -U dcq_test2 -W dcq52130... -rgsql -d postgres -p25308 -U dcq_test3 -W dcq52130... -r--切换第一个用户gsql -d p...
【问题场景】
--新建三个用户
gsql -d postgres -p25308 -U dcq_test1 -W dcq52130... -r
gsql -d postgres -p25308 -U dcq_test2 -W dcq52130... -r
gsql -d postgres -p25308 -U dcq_test3 -W dcq52130... -r
--切换第一个用户
gsql -d postgres -p25308 -U dcq_test1 -W dcq52130... -r
--创建一个函数
CREATE FUNCTION dcq_test1.func_add1(integer, integer) RETURNS integer
AS 'select $1 + $2;'
LANGUAGE SQL
IMMUTABLE
RETURNS NULL ON NULL INPUT;
--schema权限赋予用户二
grant usage on schema dcq_test1 to dcq_test2;
--切换第二个用户
gsql -d postgres -p25308 -U dcq_test2 -W dcq52130... -r
--创建一张表
create table dcq_test2.t_test (a int,b int);
insert into t_test values(1,2);
--创建一个视图
create view dcq_test2.v_test as select dcq_test1.func_add1(a, b) as c from dcq_test2.t_test;
--权限赋予用户三
grant usage on schema dcq_test2 to dcq_test3;
grant select on dcq_test2.v_test to dcq_test3;
--切换第三个用户
gsql -d postgres -p25308 -U dcq_test3 -W dcq52130... -r
--执行视图
select* from dcq_test2.v_test;
-------------------------------------------------------------------------
第二个测试
--切换第一个用户
gsql -d postgres -p25308 -U dcq_test1 -W dcq52130... -r
--从public收回函数执行权限
revoke execute on function dcq_test1.func_add1(integer, integer) from public;
--将执行权限单独赋予用户二
grant execute on function dcq_test1.func_add1(integer, integer) to dcq_test2;
--切换第三个用户
gsql -d postgres -p25308 -U dcq_test3 -W dcq52130... -r
--执行视图
select* from dcq_test2.v_test;
【问题】创建三个用户在第一个用户创建一个函数schema权限赋给第二个用户,第二个用户创建一张表和一个视图,这个视图用了第一个用户创建的函数,然后把视图的权限以及用户二的schema给第三个用户,第三个用户可以正常查询这个视图,但是用户三没有用户一的schema权限,第三个用户为什么能够执行第一个用户的函数
新创建的函数默认会给PUBLIC授予执行权限。用户可以选择收回PUBLIC默认执行权限,然后根据需要将执行权限授予其他用户,为了避免出现新函数能被所有人访问的时间窗口,应在一个事务中创建函数并且设置函数执行权限,test3用户访问test2的视图,只需要有test2的schema权限就行了,可以访问到视图之后,没有校验视图里面函数的schema权限的逻辑,只有对函数本身权限的校验;
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)