引入
首先需要说一下oracle的权限管理,oracle权限分为系统权限和对象权限:
系统权限:操作数据库系统的权限。主要包括建立会话,用户管理,角色管理,数据库对象的整体操作等权限。
对象权限:对某个或某些具体数据库对象的操作权限。
也可以按照角色粗分成DBA、RESOURCE、CONNECT,他们拥有的权限可通过下列SQL查询。
select grantee,privilege from dba_sys_privs where grantee in ('RESOURCE','CONNECT','DBA') order by grantee;
操作实例
- 新建角色:
create role role1; - 角色授予系统权限:
grant create any table,create procedure to role1; - 角色授予对象权限:
grant select on par_user_info to role1; - 新建用户:
create user test identified by password1234; - 给用户test授予connnect,resource,role1角色,当然也可以直接授权给用户
grant connect, resource,role1to test;
查看权限
- 查看当前用户所有系统权限
select * from session_privs; - 查看对象权限
1)select * from user_tab_privs;
user_tab_privs describes the object grants for which the current user is the object owner, grantor, or grantee.
2)select * from all_tab_privs;
ALL_TAB_PRIVS describes the following types of grants:
Object grants for which the current user is the object owner, grantor, or grantee
Object grants for which an enabled role or PUBLIC is the grantee
3)select * from dba_tab_privs; - 查看当前用户的所有角色
select * from session_roles; - 查看某个角色拥有的系统权限
select * from role_sys_privs where role='role_name';
一、为什么要加schema
schema与用户是一一对应的,Oracle数据库中要想创建一个schema,仅仅能通过创建一个用户的方法解决,且默认的schema名称和用户名保持一致。
一个schema相当于数据库对象按照用户区分的一个集合,每个用户建立的对象隶属于用户所在的schema,如果操作时不指定schema,那么会默认使用当前用户的schema。比如select * from user,其实是select * from schema.user。
如果创建对象时不加schema,比如在新建表T时,如果是使用A用户登录,那么该表的默认schema为A,我们建立了A.T表。再用B用户登录时,如果B用户没有DBA权限,那么B用户是没有A集合的A.T表对象的权限的,它只有自己的名为B的schema集合的对象权限,也就是B用户根本看不到A.T表。
二、为什么要加表空间
“Oracle强烈建议,任何一个应用程序的库表至少需要创建两个表空间,其中之一用于存储表数据,而另一个用于存储表索引数据。因为如果将表数据和索引数据放在一起,表数据的I/O操作和索引的I/O操作将产生影响系统性能的I/O竞争,降低系统的响应效率。将表数据和索引数据存放在不同的表空间中(如一个为APP_DATA,另一个为APP_IDX),并在物理层面将这两个表空间的数据文件放在不同的物理磁盘上(同一块磁盘仍然无法避免磁盘I/O竞争),就可以避免这种竞争了。”
所以很多系统使用的表空间和索引使用的表空间是分开的,如果不指定表空间,索引就会使用用户默认表空间影响数据库性能。