public不是角色,你可以理解为所有数据库用户的集合。
如果某个权限赋于了public,那么所有数据库的用户都可以有这个权限。
Oracle权限复杂,将权限授予给public确实是省了单独授权的操作,但是不恰当的public权限会导致权限扩散,而且回收起来困难重重,有可能导致业务无法正常运行,如果业务不重要的话,可以回收public权限,然后根据错误去单独授权。
--查看PUBLIC角色拥有的对象权限
SELECT GRANTOR,OWNER,TABLE_NAME,PRIVILEGE FROM DBA_TAB_PRIVS WHERE GRANTEE='PUBLIC';
从数据库中将存在风险的权限从public 角色撤销。但前提是在这些权限撤销后能正常工作。建议将回收权限的语句保存好,后期业务报错后根据报错和保存的语句去单独授权。
revoke XXX on Table_name from public;