--学习oracle授权
/***********************学习oracle授权需明之begin****************************/
--oracle三类角色DBA/RESOURCE/CONNECT,具体权限可由一下SQL获知
select * from dba_sys_privs where grantee='DBA' ;--可授予数据库管理员、维护人员
select * from dba_sys_privs where grantee='RESOURCE' ;--可授予开发人员
select * from dba_sys_privs where grantee='CONNECT' ;--可授予访问人员
--查看用户权限
select * from dba_sys_privs where grantee='TESTUSER' ;
select * from dba_role_privs where grantee='TESTUSER' ;
--关于以上两个表都可以查看用户权限,到底什么区别呢?
--官方解释:
--1.DBA_ROLE_PRIVS describes the roles granted to all users and roles in the database.
--2.ROLE_SYS_PRIVS describes system privileges granted to roles. Information is provided only about roles to which the user has access.
--即dba_sys_privs描述的表详尽,如create table、select on xxTable等
--dba_role_privs描述的是用户拥有的角色
--ROLE_SYS_PRIVS描述的是某个角色到底有哪些系统权限
--关于系统权限网友总结待验证
--1. 系统权限unlimited tablespace是隐含在dba, resource角色中的一个系统权限. 当用户得到dba或resource的角色时, unlimited tablespace系统权限也隐式受权给用户.
--2. 系统权限unlimited tablespace不能被授予role, 可以被授予用户.
--3. 系统权限unlimited tablespace不会随着resource, dba被授予role而授予给用户.
/***********************学习oracle授权需明之end****************************/
/********************************部分测试SQL*********************************/
--创建一个用户testuesr1
create user testuser1 identified by testuser1 ;
--仅仅创建一个用户不进行授权时 testuser1是不能被访问和登录的
grant create session to testuser1;
--授予建表权限否则无权创建数据表
grant create table to testuser1 with admin option;--当前用户是DBA需要传递系统权限admin option
--创建一个表test1
create table test1 (id number(9),name varchar2(20));
--给testuser1用户授予创建用户的权限
grant create user to testuser1;
--testuser1用户下创建用户testuser11
create user testuser11 identified by testuesr11;
--需要给testuser11授予连接权限
grant create session to testuser11;--create session权限并没有传递给testuser1,因此不能通过testuser1给testuser11授权
--通过testuser给testuser1授予create session权限
grant create session to testuser1 ;
--testuser1创建session权限成功后
grant create session to testuser11;--此时也不能成功授权【因为testuser1没有create session的授予权限】
--testuser可以直接授权给testuser11
grant create table to testuser11;--权限传递成功
create table test2(id number(9),name varchar2 (20));
--收回testuser1的create table权限
revoke create table from testuser1;
--进入testuser11
create table test3(id number(9),name varchar2 (20));--创建成功,权限并没有收到testuser1权限回收而收回
grant select on test1 to testuser11 with grant option;--授予testuser11查询testuser1的test1表权限,并可以传递给testuser11创建的用户
select * from testuser1.test1;--查询成功
/***********************学习oracle授权需明之begin****************************/
--oracle三类角色DBA/RESOURCE/CONNECT,具体权限可由一下SQL获知
select * from dba_sys_privs where grantee='DBA' ;--可授予数据库管理员、维护人员
select * from dba_sys_privs where grantee='RESOURCE' ;--可授予开发人员
select * from dba_sys_privs where grantee='CONNECT' ;--可授予访问人员
--查看用户权限
select * from dba_sys_privs where grantee='TESTUSER' ;
select * from dba_role_privs where grantee='TESTUSER' ;
--关于以上两个表都可以查看用户权限,到底什么区别呢?
--官方解释:
--1.DBA_ROLE_PRIVS describes the roles granted to all users and roles in the database.
--2.ROLE_SYS_PRIVS describes system privileges granted to roles. Information is provided only about roles to which the user has access.
--即dba_sys_privs描述的表详尽,如create table、select on xxTable等
--dba_role_privs描述的是用户拥有的角色
--ROLE_SYS_PRIVS描述的是某个角色到底有哪些系统权限
--关于系统权限网友总结待验证
--1. 系统权限unlimited tablespace是隐含在dba, resource角色中的一个系统权限. 当用户得到dba或resource的角色时, unlimited tablespace系统权限也隐式受权给用户.
--2. 系统权限unlimited tablespace不能被授予role, 可以被授予用户.
--3. 系统权限unlimited tablespace不会随着resource, dba被授予role而授予给用户.
/***********************学习oracle授权需明之end****************************/
/********************************部分测试SQL*********************************/
--创建一个用户testuesr1
create user testuser1 identified by testuser1 ;
--仅仅创建一个用户不进行授权时 testuser1是不能被访问和登录的
grant create session to testuser1;
--授予建表权限否则无权创建数据表
grant create table to testuser1 with admin option;--当前用户是DBA需要传递系统权限admin option
--创建一个表test1
create table test1 (id number(9),name varchar2(20));
--给testuser1用户授予创建用户的权限
grant create user to testuser1;
--testuser1用户下创建用户testuser11
create user testuser11 identified by testuesr11;
--需要给testuser11授予连接权限
grant create session to testuser11;--create session权限并没有传递给testuser1,因此不能通过testuser1给testuser11授权
--通过testuser给testuser1授予create session权限
grant create session to testuser1 ;
--testuser1创建session权限成功后
grant create session to testuser11;--此时也不能成功授权【因为testuser1没有create session的授予权限】
--testuser可以直接授权给testuser11
grant create table to testuser11;--权限传递成功
create table test2(id number(9),name varchar2 (20));
--收回testuser1的create table权限
revoke create table from testuser1;
--进入testuser11
create table test3(id number(9),name varchar2 (20));--创建成功,权限并没有收到testuser1权限回收而收回
grant select on test1 to testuser11 with grant option;--授予testuser11查询testuser1的test1表权限,并可以传递给testuser11创建的用户
select * from testuser1.test1;--查询成功