上面的方式比较麻烦 , 因为要对每一个表单独对角色进行授权 。下面使用一个比较快的方式来解决这个授权的过程 。
BEGIN-- FOR t IN (SELECT * FROM user_tables)FOR t in (SELECT owner, object_name, object_type FROM all_objects WHERE owner = UPPER('sunny_cmd') AND object_type IN ('TABLE','VIEW','PROCEDURE','FUNCTION','PACKAGE'))LOOP-- EXECUTE IMMEDIATE 'GRANT SELECT ON ' || t.table_name || ' TO my_readonly_role';IF t.object_type IN ('TABLE','VIEW') THENEXECUTE IMMEDIATE 'GRANT SELECT ON '||t.owner||'.'||t.object_name||' TO my_readonly_role';-- ELSIF t.object_type IN ('PROCEDURE','FUNCTION','PACKAGE') THEN-- EXECUTE IMMEDIATE 'GRANT DEBUG ON mydb.'||t.object_name||' TO my_readonly_role';END IF;END LOOP;END;上面的SQL语句块中 , 使用到了查询某一个用户下面所有的数据库对象的查询方式 , 如果要查询某一个用户下面所有的数据库对象 , 可以通过如下的SQL语句:
/*查询mydb用户下面所有的数据库对象 , 包括表、视图、存储过程、函数、包 。*/SELECT * FROM all_objects WHERE owner = UPPER('mydb') AND object_type IN ('TABLE','VIEW','PROCEDURE','FUNCTION','PACKAGE')
- 创建只读用户
create user my_ro_user identified by "my_ro_user";- 给新创建的用户授权登录的权限
grant create session to my_ro_user;- 把只读角色授予新创建的只读用户
grant my_readonly_role to my_ro_user;同义词的使用当我们在只读用户下面 , 访问其他用户下面的只读权限的表时 , 如果不想在SQL语句中指定其他用户名称 , 那么就需要在当前只读的用户下面创建一个个表的同义词 , 让这个同义词自动指向其他用户下面对应的表 , 这样在只读用户下面就可以直接使用表名称 , 不用在每一个表名称前面增加用户名称了 。前提是当前只读的用户 , 对另外一个用户下的表 , 是有只读的权限的 , 然后在当前只读用户下创建同义词才可用 , 否则只要同义词没有对应的访问权限 , 通过同义词是不能访问到对应的数据表的 。
【Oracle如何创建只读用户】
推荐阅读
- API攻击原理,以及如何识别和预防
- 如何辨别网购衣服的质量
- 普洱茶烟50块钱的,什么是普洱茶普洱茶的简介
- 小花飞燕草和大花飞燕草,飞燕草花期和花语
- 如何解决宏碁台式电脑没有声音
- 曹操杀吕布的时候刘备说了什么,曹操要是用了吕布结局会如何
- 普洱茶品牌排行榜,普洱茶排行榜情况如何
- mac怎么设置不待机,如何设置mac电脑不休眠 不锁屏-
- mac如何安装sz,rz,实现本地和服务器文件传输「开发效率工具」
- 如何设置让U盘只能拷进不能拷出?
