工作中遇到需要跨用户查询表和视图的场景,报错 insufficient privileges ,权限不足,所以了解了一下授权的操作,整理记录下来以备查阅,也希望能帮助到你。

1 创建用户

以sys用户连接数据库,并创建两个用户demo01和test0217

--创建用户
CREATE USER test0217
  IDENTIFIED BY 123456
  DEFAULT TABLESPACE USERS
  TEMPORARY TABLESPACE TEMP
  PROFILE DEFAULT
  ACCOUNT UNLOCK;

  -- 2 Roles for 数据库名 
  GRANT CONNECT TO test0217;
  GRANT RESOURCE TO test0217;
  ALTER USER test0217 DEFAULT ROLE ALL;
 
  -- 3 System Privileges for 数据库名 
  GRANT CREATE ANY VIEW TO test0217;
  GRANT CREATE DATABASE LINK TO test0217;
  GRANT CREATE LIBRARY TO test0217;
  GRANT CREATE PUBLIC DATABASE LINK TO test0217;
  GRANT DROP ANY VIEW TO test0217;
  GRANT DROP PUBLIC DATABASE LINK TO test0217;
  GRANT EXPORT FULL DATABASE TO test0217;
  GRANT IMPORT FULL DATABASE TO test0217;
  GRANT UNLIMITED TABLESPACE TO test0217;

2 创建表和视图

给demo01用户创建表menu 和 视图 v_test0217

--创建表
create table DEMO01.MENU
(
  menu_id   VARCHAR2(10) not null,
  menu_name VARCHAR2(50) not null
);
--创建视图
 CREATE OR REPLACE VIEW demo01.v_test0217
   AS
   SELECT 'SER'||menu_Id as menuId,menu_Name
   FROM DEMO01.MENU
   WITH READ ONLY
   

3 授权

给用户test0217授权demo01用户的表和视图的查询权限
先查询用户demo01有哪些表和视图的权限

--表权限
select table_name from all_tables where lower(owner)='demo01';

--视图权限
select view_name  from all_views where lower(owner) = 'demo01';

查询授权语句的结果集拷出来执行进行授权

--表权限的授权语句
select 'GRANT SELECT ON DEMO01.'||table_name||' to test0217;'  from all_tables where lower(owner)='demo01';
--执行 
GRANT SELECT ON DEMO01.MENU to test0217;

--视图权限的授权语句
select 'grant select on DEMO01.' || view_name || ' to test0217;' from all_views where lower(owne)='demo01';
--执行
grant select on DEMO01.V_TEST0217 to test0217;

参考博客:
https://www.cnblogs.com/hyq0002013/p/5623326.html

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐