Oracle 将一个用户的表或视图的查询权限赋予另一个用户
Oracle将一个用户的表和视图的查询权限赋予另一个用户
·
工作中遇到需要跨用户查询表和视图的场景,报错 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
更多推荐
已为社区贡献1条内容
所有评论(0)