OS:AIX5.3
Oracle:Oracle10.2.0.1.0
标题:在一个数据库中模拟两个数据库(每个数据库中都表的同义词)
需求描述:目前需要在一个数据库中模拟两个数据库(每个数据库中都需要有2个用户访问相同的对象,这就需要建立私有同义词)。原来的数据库中存在一个lhomswas用户,该用户所拥有的对象增删改查权限都赋予给lhdt用户,该用户还创建了与表名一样的公共同义词(public synonym),现在需要新建一个jtomswas用户,这个用户导入其他的数据库,jtomswas用户所拥有的对象都授权给jtdt用户。(这同时需要新建jtdt用户,并在jtomswas用户的表中建立私有的同义词,这样方便jtdt使用)。
因为数据库已经存在了lhomswas用户,并且存在了lhdt用户。
1、用lhomswas用户查看自己拥有的同义词
| SQL>select * from all_synonyms where table_owner='LHOMSWAS'; |
如果表中没有公共的同义词,可以创建;把所有的表创建相应的公共同义词sql语句,如:
| SQL>select 'create or replace public synonym '|| table_name || ' for lhomswas.'||table_name||';' from user_tables; |
把产生的sql语句导出来,然后在lhomswas用户下执行即可。这样可以把lhomswas用户的所有表建立相应的同义词了。
2、用lhomswas查看自己所拥有的表是否已经授权给了lhdt用户
| SQL>select * from user_tab_privs; |
如果没有授权,把所有表的增删改查权限授权给lhdt用户sql语句,如:
| SQL>select 'grant select,update,insert,delete on '||table_name||' to lhdt;' from user_tables; |
把产生的sql语句导出来,然后在lhomswas用户下执行即可。这样可以把lhomswas用户的所有表授权给lhdt用户了。
3、在数据库中创建表空间,用来供新创建jtomswas使用
| SQL> create tablespace jtomswas 2 datafile '/home/oraoms/oradata/omsdata/jtomswas.dbf' 3 size 512M autoextend on maxsize 10G; Tablespace created. |
4、创建jtomswas用户
| SQL> create user jtomswas 2 identified by jtomswas 3 default tablespace jtomswas ; User created. |
5、授权权限:
| SQL> grant connect,resource,dba to jtomswas; Grant succeeded. |
(暂时赋予DBA角色的权限,以便导入数据,不然权限不够)
6、现在先导出其他数据库中的数据,以便导入进来(数据库比较大的话,有可能需要好几个小时)
在Windows的CMD窗口,或者是Linux、UNIX的命令窗口(前提是能够使用Oracle exp、imp的命令):
| exp jtomswas/password@ORCL file=E:\BeiJingDatabaseBackup20081215\beijing20081215.dump log=E:\BeiJingDatabaseBackup20081215\beijing20081215.log |
7、导入到目前的数据库中来(数据库比较大的话,有可能需要好几个小时)
在Windows的CMD窗口,或者是Linux、UNIX的命令窗口(前提是能够使用Oracle exp、imp的命令):
| imp jtomswas/password@NEWORCL fromuser=jtomswas touser=jtomswas rows=y ignore=yes grants=no file=E:\BeiJingDatabaseBackup20081215\beijing20081215.dump log=E:\BeiJingDatabaseBackup20081215\Impbeijing20081216.log |
8、新建jtdt用户
| SQL> create user jtdt 2 identified by jtdt; User created. |
9、给jtdt用户授与权限:
| SQL>grant connect,resource to jtomswas; |
暂时赋予connect,resource的角色。
10、需要把jtomswas用户的表权限仅供jtdt用户使用,所有建立私有的同义词,以便与jtdt通讯,用jtomswas用户查询
| SQL>select 'create synonym jtdt.'|| table_name || ' for jtomswas.'||table_name||';' from user_tables; |
把产生的sql语句导出来,然后在jtomswas用户下执行即可。这样可以把jtomswas用户的所有表建立相应的私有同义词了。
11、把jtomswas用户的表权限授予给jtdt用户
| SQL>select 'grant select,update,insert,delete on '|| table_name ||' to jtdt;' from user_tables; |
把产生的sql语句导出来,然后在jtomswas用户下执行即可。这样可以把jtomswas用户的所有表授权给jtdt用户了。
到此结束!
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12778571/viewspace-512092/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12778571/viewspace-512092/
本文介绍如何在一个Oracle数据库中模拟两个独立数据库环境,通过创建用户、表空间及使用同义词实现不同用户间的对象隔离与访问控制。
774

被折叠的 条评论
为什么被折叠?



