ORACLE授权用户查询另一个用户下的表与视图

简介:

实际应用中,会遇到在某个用户下需要查询另一个用户下的表数据或视图的情况,然而在没有授权时,会提示无权限操作的错误。那就需要通过授权处理后,再能进行查询操作,下面我们来看看是怎么处理的。


一、系统权限说明:

1、用户权限

CREATE SESSIOIN 连接到数据库

CREATE TABLE    在用户的方案中创建表

CREATE SEQUENCE 在用户的方案中创建序列

CREATE VIEW     在用户的方案中创视图

CREATE PROCEDURE在用户的方案中创建存储过程,函数或包


1.1、例子:授予系统权限

DBA能够授予用户指定的系统权限

GRANT create session,create table,

       create sequence,create view

 TO scott;


二、创建用户只用于查询其它用户库的表和视图

1、创建用户

1
2
3
4
5
create user 用户名 identified by 密码;
grant connect, select  any table to 用户名;
这样创建的用户就可以连接数据库和只有对任何表有查询权限了
 
grant connect to 用户名   // 只有连接权限

2、授权查询表与视图权限

2.1、a用户下授权查询所有表给b用户(a用户登录执行下面语句)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
select  'grant select on a.'  || tname ||  ' to b;'  from tab;
'GRANTSELECTONA.' ||TNAME|| 'TOB;'
------------------------------------------------------
grant  select  on a.VOTE_NUM to b;
grant  select  on a.TMP_MSG to b;
grant  select  on a.VOTE_IP to b;
grant  select  on a.QUESTION to b;
grant  select  on a.QUESTION_COUNT to b;
grant  select  on a.RECORD_DICT to b;
grant  select  on a.BM_COLUMN to b;
grant  select  on a.BM_COLUMN_CLASSIFY_REL to b;
grant  select  on a.BM_INFO_CLASSIFY to b;
grant  select  on a.BM_MODULE to b;
grant  select  on a.BM_MODULE_AUTH to b;
 
 
select  'grant select on ' ||table_name|| ' to b;'   from user_tables;
 
'GRANTSELECTON' ||TABLE_NAME|| 'TOB;'
----------------------------------------------------
grant  select  on VOTE_NUM to b;
grant  select  on TMP_MSG to b;
grant  select  on VOTE_IP to b;
grant  select  on QUESTION to b;
grant  select  on QUESTION_COUNT to b;
grant  select  on RECORD_DICT to b;
grant  select  on BM_COLUMN to b;
grant  select  on BM_COLUMN_CLASSIFY_REL to b;
 
说明:在a用户下执行该语句,执行后会生成对所有表的赋权限语句,拷贝出来执行就可以了。


2.2、a用户下授权查询单个表给b用户

1
grant  select  on a.tablename to b;


2.3、a用户下授权查询所有序列给b用户

1
select  'grant select on '  || sequence_name ||  ' to b;'  from dba_sequences where sequence_owner= 'A' ;

 

2.4、--Oracle查询用户视图

1
select  * from user_views;

2.5、a用户下授权查询视图给test11用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
select  'grant select on a.'  || view_name ||  ' to test11;'  from user_views;
 
视图查询如下:
 
'GRANTSELECTON' ||VIEW_NAME|| 'TOTEST11;'
---------------------------------------------------------
grant  select  on CONFIRM_RESERVATION_VIEW to test11;
grant  select  on DEPARTMENT_RESERVATION_VIEW to test11;
grant  select  on DEPART_CANCEL_RESERVATION_VIEW to test11;
grant  select  on DOCTOR_CANCEL_RESERVATION_VIEW to test11;
grant  select  on DOCTOR_RESERVATION_VIEW to test11;
grant  select  on GRPSS to test11;
grant  select  on HOSPITAL_ALL_SCHEDULE_VIEW to test11;
grant  select  on HOSPITAL_DEPARTMENT_VIEW to test11;
grant  select  on HOSPITAL_DEP_SCHEDULE_VIEW to test11;
grant  select  on HOSPITAL_DOCTOR_VIEW to test11;
grant  select  on HOSPITAL_DOC_SCHEDULE_VIEW to test11;
 
'GRANTSELECTON' ||VIEW_NAME|| 'TOTEST11;'
---------------------------------------------------------
grant  select  on PATIENT_COUNT_RESERVATION_VIEW to test11;
grant  select  on PATIENT_RESERVATION_VIEW to test11;
grant  select  on PATIENT_RESERVATION_VIEW2 to test11;
grant  select  on PATIENT_RES_VIEW to test11;
grant  select  on PRVIEW to test11;
grant  select  on RES_VIEW to test11;
grant  select  on SS to test11;

备注:授权更新、删除的 语法和授权查询类似,只是关键字不同而已。


三、撤消权限

1、授权a用户下取消给b用户删除单个表的权限

revoke delete on a.tablename from b;

2、授权a用户下取消给b用户更新单个表的权限

revoke update on a.tablename from b;

3、拥有dba权限的用户下取消给b用户创建dblink的权限

revoke create database link from b;

4、拥有dba权限的用户下取消给tes11用户查询任何表的权限

revoke select any table from test11;


四、事例:

1、在rh_test用户下授权查询所有表给wd用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
select 'grant select on rhip_test.' || tname || ' to wd;' from tab;
 
'GRANTSELECTONRH_TEST.'||TNAME||'TOWD;'
----------------------------------------------------------------
grant select on rh_test.BIZ_CODE_REL to wd;
grant select on rh_test.BIZ_RMIM_DIC to wd;
grant select on rh_test.BIZ_RMIM_VERSION to wd;
grant select on rh_test.BIZ_RMIM_VERSION_DETAIL to wd;
grant select on rh_test.BIZ_RMIM_VERSION_SUBDETAIL to wd;
grant select on rh_test.BIZ_SYSTEM_LOGIN to wd;
grant select on rh_test.BIZ_TREE_PATH to wd;
grant select on rh_test.CLINIC_TRANSFER to wd;
grant select on rh_test.CODE_SYSTEM_DIC to wd;
 
'GRANTSELECTONRH_TEST.'||TNAME||'TOWD;'
----------------------------------------------------------------
grant select on rh_test.ETL_PATIENT_INDEX to wd;
grant select on rh_test.HOSPITAL_DIC to wd;
grant select on rh_test.HOSPITAL_SUBSYSTEM to wd;
grant select on rh_test.MAIL_RECORD to wd;
grant select on rh_test.MEDICAL_RECORD to wd;
grant select on rh_test.PATIENT_INDEX to wd;
grant select on rh_test.RHIP_SYSCONFIG to wd;
grant select on rh_test.SYSTEMLOGIN to wd;
 
将上面查出的语句执行一下即可。

2、a用户下授权查询单个表给test11用户

1
2
3
4
5
6
7
8
9
10
select 'GRANT SELECT ON' || table_name || 'to test11;'  from user_tables
得到的结果如下:
GRANT SELECT ON WEBSERVICE_USER to test11
GRANT SELECT ON USERLESS_PATIENT to test11;
再把上面得到的结果逐一执行一遍:
GRANT SELECT ON WEBSERVICE_USER to test11
GRANT SELECT ON USERLESS_PATIENT to test11;
 
新建的表要想被userA访问,也得执行grant语句:
grant select on 新建的表 to userA;

3、授权a用户下授权更新单个表给b用户

grant update on a.tablename to b;

4、授权a用户下授权删除单个表给b用户

grant delete on a.tablename to b;

5、拥有dba权限的用户下授权创建dblink给b用户

grant create database link to b;







      本文转自ling118 51CTO博客,原文链接http://blog.51cto.com/meiling/2062463:,如需转载请自行联系原作者

相关文章
|
6天前
|
SQL Oracle 关系型数据库
Oracle查询优化-查询只包含数字或字母的数据
【2月更文挑战第4天】【2月更文挑战第10篇】查询只包含数字或字母的数据
123 1
|
6天前
|
Oracle 关系型数据库 数据库
Oracle查询优化-复制表的定义及数据
【1月更文挑战第5天】【1月更文挑战第14篇】在Oracle数据库中,复制表定义和复制表数据是两个常见的操作。
58 1
|
4天前
|
消息中间件 关系型数据库 Kafka
实时计算 Flink版产品使用合集之oracle cdc 抽取新增一张表 可以从savepoint恢复吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
13 0
|
6天前
|
SQL Oracle 关系型数据库
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
71 0
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
|
6天前
|
Oracle 关系型数据库 Java
Oracle 19c 查看隐含参数视图
Oracle 19c 查看隐含参数视图
23 7
|
6天前
|
分布式计算 DataWorks 关系型数据库
DataWorks产品使用合集之在 DataWorks 中,使用Oracle作为数据源进行数据映射和查询,如何更改数据源为MaxCompute或其他类型
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
33 1
|
6天前
|
SQL 存储 Oracle
Oracle中的Dual表:数据世界的“神奇小盒子”
【4月更文挑战第19天】Oracle的Dual表是一个虚拟表,仅含一行一列,常用于执行SQL函数、数据类型转换、测试语句和动态SQL。它是测试和便捷操作的工具,如获取当前日期(`SELECT SYSDATE FROM DUAL`)、数字转字符串(`SELECT TO_CHAR(12345) FROM DUAL`)。在存储过程、函数和触发器中也发挥重要作用,是数据库管理员的得力助手。
|
6天前
|
存储 SQL Oracle
Oracle系列十二:视图、记录、同义词、序列
Oracle系列十二:视图、记录、同义词、序列
|
6天前
|
SQL Oracle 关系型数据库
Oracle系列之八:SQL查询
Oracle系列之八:SQL查询
|
6天前
|
存储 Oracle 关系型数据库
Oracle系列之七:表的创建与管理
Oracle系列之七:表的创建与管理

推荐镜像

更多