讲解oracle建立用户及授权 正版oracle授权购买( 二 )


通过角色来授予查询权限创建一个角色 , 然后把对某个数据库下面的表的权限授予这个角色 , 然后再把这个角色赋予某一个用户 。这样用户就可以以某种角色去访问某一个数据库下面的表了 。
具体实现方式参考如下:
创建只读角色create role my_readonly_role;将数据库下面所有的表授权给角色/*mydb是Oracle的数据库名称 , 也是用户名称 , userinfo是mydb下面的表 , my_readonly_role是一个角色名称*/grant select on mydb.userinfo to my_readonly_role;上面的方式比较麻烦 , 因为要对每一个表单独对角色进行授权 。下面使用一个比较快的方式来解决这个授权的过程 。
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语句中指定其他用户名称 , 那么就需要在当前只读的用户下面创建一个个表的同义词 , 让这个同义词自动指向其他用户下面对应的表 , 这样在只读用户下面就可以直接使用表名称 , 不用在每一个表名称前面增加用户名称了 。
前提是当前只读的用户 , 对另外一个用户下的表 , 是有只读的权限的 , 然后在当前只读用户下创建同义词才可用 , 否则只要同义词没有对应的访问权限 , 通过同义词是不能访问到对应的数据表的 。


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: