在实际生产中有这样的需求:
业务用户A有比较大的权限,外部访问数据库,如果通过A,安全隐患较多,所以需要创建一个用户B,B只能查询A拥有的表或视图等对象,无法 insert/update/delete
1.创建用户B
create user userB identified by "userB " default tablespace tbs1 temporary tablespace tbs1_temp profile DEFAULT;
2.授权
grant connect to userB; --连接权限
grant CREATE SESSION to userB; --创建会话权限
grant CREATE SYNONYM to userB; --创建同义词权限
grant select any table to userB; --可以查询任何表
--revoke SELECT ANY TABLE from userB; --回收权限
还有一种授权方式:授予某个用户的某个表的 select/insert/update 权限
grant select on userA.t_bd_customer to userB;
grant insert on userA.t_bd_customer to userB;
grant update on userA.t_bd_customer to userB;
查看某个用户拥有哪个表的哪些权限:
记住这个表:all_tab_privs
select * from all_tab_privs where GRANTEE='USERB';
3.创建同义词,不创建就不能直接通过单独的名词来查询
create synonym table1_sy for userA.table1;
附:批量创建同义词的脚
select 'create or replace synonym '||object_name||' for '||owner||'.'||object_name||';' from dba_objects
where owner in ('USERA') and object_type='TABLE';
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步