Oracle数据库各用户间表访问

Oracle数据库有一个用户的概念,我把不同的用户理解为不同的库。

简单来说,我把交易库称为TRADE用户,我把客户管理的库成为ACCOUNT用户。

正常情况下,每个用户访问自己对应的表,但是当需要跨用户访问时,我们就有三个选择。

一.交易库赋予客户库查询交易表权限,我们称之为授权,关键字为grant。

现在我们模拟从A用户,把ableName的操作权限赋予B用户,以下授权语句应该在A库执行。

1. SELECT * FROM  dba_users; --查询数据库中的所有用户

2.GRANT SELECT ON tableName to B;--授权查询(将表tableName的查询权授给B)

GRANT INSERT ON tableName to B;--授权插入(将表tableName的插入权授给B)

GRANT UPDATE ON tableName to B;--授权更新(将表tableName的更新权授给B)

GRANT UPDATE ON tableName to Bwith grant option; --授权更新权限转移给用户,被用户可以继续授权给其他用户;

GRANT EXECUTE  ON ProceDureName to B;--授权存储过程

3.Revoke select on tableName from B; --收回查询表的权限;

Revoke all on tableName from B;--收回表tableName 的所有权限;

4.SELECT  * from dba_tab_privs where grantee=upper('DC_CH');--查询一个用户被赋予的对象权限

Oracle数据库各用户间表访问_第1张图片

SELECT * from dba_sys_privs where grantee=upper('DC_CH');--查询一个用户拥有的系统权限

SELECT*  from session_privs ;--当前会话有效的系统权限

这样,我们直接就可以从B用户操作A用户的tableName这张表了,对应的语句为

SELECT * from A.tableName;

UPDATE A.tableName set...等等

二.把操作粒度变大一点,使B用户像操作自己的表一样操作A用户中的表,引入同义词这个概念

同义词的好处

1、不占内存空间,节省大量的数据库空间

2、简化了数据库对象的访问

3、提高了数据库对象访问的安全性

4、扩展的数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;同义词可以创建在不同一个数据库服务器上,通过网络实现连接

1.在A用户中建立私有同义词

CREATE SYNONYM TB FOR tableName;

这样SELECT * FROM TB= SELECT * FROM tableName.  

假设我们已经把这张表的不同权限授予了B用户,那么我们可以从B中以SELECT * FROM A.TB的形式访问到tableName。

2.在A用户中建立共有同义词

CREATE PUBLIC SYNONYM TB FOR tableName;

这样这个库下的所有用户都能直接以SELECT * FROM TB的方式访问tableName。

-- 删除公有同义词:
drop public synonym TB ;

-- 删除私有同义词:
drop synonym TB ;

三.粒度更大一点,B用户可以操作A用户下面全部的表,引入DB Link。

1.通过界面化工具建立数据库连接。

Oracle数据库各用户间表访问_第2张图片

2.通过SQL语句建立数据库连接

  create database link DS
  connect to DS_CH identified by ds
  using '192.168.1.244/orch';

从B用户访问A用户的表的方式为 SELECT * FROM TB@A.

这样三种库用户访问的方式就介绍完了,至于如何取舍,还是根据实际情况来决定。

你可能感兴趣的:(数据库,GRANT授权,DBLINK,同义词,Oracle,数据库连接)