暂无图片
PG13.10权限问题咨询
我来答
分享
暂无图片 匿名用户
PG13.10权限问题咨询

1、用户


2、数据库(新建的数据库)


3、前提

新建的test数据库中,dba_admin顺序执行下列语句:

create table t1(id int);

GRANT USAGE, CREATE ON SCHEMA public TO zll_testuser;

ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO zll_testuser;

create table t2(id int);

create view v_t1 as select * from t1 ;

4、问题

zll_testuser登录test数据库后,无法访问t1,可以访问t2,为啥还能访问v_t1?



我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新
Ellison
2023-11-07

这通常是由于应用程序使用的数据库版本与数据库服务器不兼容引起的。 解决方案: 确保应用程序使用的数据库版本与数据库服务器兼容。

暂无图片 评论
暂无图片 有用 1
打赏 0
结束
2023-11-07

我这是直接在应用服务器上执行的命令

暂无图片 评论
暂无图片 有用 0
打赏 0
彭冲
2023-11-08

无法访问t1的原因:t1表是在设置默认权限操作之前创建的,需要对t1表grant赋权才能访问。

可以访问t2的原因:t2表是在设置默认权限操作之后创建的,可以访问。

还能访问v_t1的原因:v_t1视图类属于table,对table的默认权限设置也适用于view,也可以访问。

这也是使用视图非常方便的特性,可以减少视图里相关对象的权限设置而允许用户有部分访问权限。

我们也可以更安全的控制视图v_t1的权限,让pg检测基表的权限:需要在15及以上的版本使用security_invoker属性,参考操作如下:

alter view v_t1 set (security_invoker = on);
复制

此时zll_testuser登录test数据库后,也无法访问v_t1。

暂无图片 评论
暂无图片 有用 1
打赏 0
大树666
2023-11-17

建议查一下这张表information_schema.table_privileges,看下用户的权限。

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏