You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Oracle中如何让其他Schema访问视图?授权后遇ORA-00942错误

解决ORA-00942: table or view does not exist的问题

这个问题我之前处理过,根源是对象的Schema可见性导致的——你虽然给了other_user视图的SELECT权限,但other_user登录后默认只会查找自己Schema下的对象,而视图是创建在admin的Schema里的,所以才会报找不到的错误。下面是两种可行的解决方法:

方法1:访问时显式指定Schema前缀

other_user登录后,执行查询时加上视图所在的Schema名称,明确告诉数据库要找哪个Schema下的视图:

SELECT color, quantity FROM admin.new_product_view;

方法2:创建同义词(推荐,更便捷)

如果不想每次查询都手动加Schema前缀,可以创建同义词,让other_user直接通过视图名访问:

私有同义词(仅other_user可用)

切换回admin用户,执行以下语句,给other_user的Schema创建私有同义词:

CREATE SYNONYM other_user.new_product_view FOR admin.new_product_view;

之后other_user登录后,直接执行SELECT * FROM new_product_view;就能正常访问视图了。

公共同义词(所有有权限的用户都可用)

如果后续有多个用户需要访问这个视图,可以创建公共同义词,让所有拥有权限的用户都能直接用视图名访问:

CREATE PUBLIC SYNONYM new_product_view FOR admin.new_product_view;

额外验证:确认权限已正确授予

为了确保权限没有遗漏,admin用户可以执行以下查询,验证other_user的SELECT权限是否生效:

SELECT grantee, privilege, table_name 
FROM user_tab_privs 
WHERE table_name = 'NEW_PRODUCT_VIEW' AND grantee = 'OTHER_USER';

如果结果里能看到OTHER_USER对应的SELECT权限,说明权限授予是没问题的,只需要解决可见性问题即可。

内容的提问来源于stack exchange,提问作者user3153014

火山引擎 最新活动