如何在oracle中创建只读数据库链接
考虑以下场景…. 我有一个主用户MASTER. 我有一个测试用户TEST. 对于两个用户,表结构是相同的.两个用户都可以在不同的oracle服务器上. 然后我通过使用以下命令以test用户身份登录到sql plus来创建数据库链接作为master_link 创建数据库链接master_link通过密码使用连接到主机(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.9.139)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl))) 通过以测试用户身份登录并使用数据库链接名称,我可以修改主用户中的表.例如 update table1 @ master_link set display_title =’PONDS’; 此查询更新主用户的表table1. 我的要求是我想给予数据库链接(master_link)的只读权限,以便测试用户不能使用数据库链接修改或插入主用户的任何表. 解决方法在MASTER架构所在的任何数据库上,您需要创建一个新用户(即MASTER_READ_ONLY).在所有MASTER表上授予MASTER_READ_ONLY用户SELECT访问权限(最有可能通过角色). (可选)在MASTER_READ_ONLY模式中创建公共同义词或私有同义词,以引用MASTER中的对象.然后,在创建数据库链接时,请使用MASTER_READ_ONLY帐户而不是MASTER帐户.就像是 作为一名DBA CREATE USER master_read_only IDENTIFIED BY password2; GRANT create session,create synonym TO master_read_only; CREATE ROLE master_ro_role; GRANT master_ro_role TO master_read_only; 作为MASTER BEGIN FOR x IN (SELECT * FROM user_tables) LOOP EXECUTE IMMEDIATE 'GRANT SELECT ON master.' || x.table_name || ' TO master_ro_role'; END LOOP; END; 作为MASTER_READ_ONLY BEGIN FOR x IN (SELECT * FROM all_tables WHERE owner='MASTER') LOOP EXECUTE IMMEDIATE 'CREATE SYNONYM ' || x.table_name || ' FOR master.' || x.table_name; END LOOP; END; 在已创建TEST用户的数据库上 CREATE DATABASE LINK master_link CONNECT TO master_read_only IDENTIFIED BY password2 USING (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST =192.168.9.139) (PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = orcl))) (编辑:淮安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |