
Oracle DB 关于CONNECT、RESOURCE 和DBA 角色权限
Oracle的默认数据库用户
sys 、system、scott 。
sys:
数据库中所有数据字典表和视图都存储在SYS模式中。
SYS用户主要用来维护系统信息和管理实例。
SYS用户作用如同Linux中的root用户,SYS用户大于Oracle数据库中所有用户权限。
数据字典存放的是整个数据库最基本最基本的信息,表的信息,列的信息 …。
动态视图是Oracle数据库时时刻刻运行的情况都在动态视图中有记载。
动态视图是由sys用户维护的。
SYSTEM:
SYSTEM是默认的系统管理员,该用户拥有Oracle管理工具使用的内部表和视图。
通常通过SYSTEM用户管理数据库用户、权限和存储等。
SYSTEM做普通的维护工作,比如创建表以后查看执行计划。
SCOTT:
示范账户,就一个普通用户。
创建新用户
create user test1 identified by test1;
权限
权限有两种类型:
-
系统权限允许用户执行某些数据库操作,如创建表就是一个系统权限。 -
对象权限允许用户对数据库对象(如表、视图、序列等)执行特定操作。
系统权限
#不用用户登录
sqlplus/nolog
#没有create session权限
SQL> conn test1/test1@orcl
ERROR:
ORA-01045: user TEST1 lacks CREATE SESSION privilege; logon denied
conn system/password
grant create session to test1;
conn test1/test1
#权限不足 没有创建表的权限
SQL> create table student(sno number);
create table student(sno number)
*
ERROR at line 1:
ORA-01031: insufficient privileges
exit
sqlplus system/password
grant create table to test1;
#无限制使用表空间权限
grant unlimited tablespace to test1;
conn test1/test1
SQL> create table student(sno number);
Table created.
给其他用户创建表
sqlplus system/password
#可以创建任何一张表(any)
grant create any table to test1;
conn test1/test1
create table scott.a(id int);
conn scott/scott
#查看所有表
select * from tab;
查看该用户已被授予权限
select * from dba_sys_privs d where d.grantee = 'TEST1';
SQL> select * from dba_sys_privs d where d.grantee = 'TEST1';
GRANTEE PRIVILEGE ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
TEST1 UNLIMITED TABLESPACE NO
TEST1 CREATE TABLE NO
TEST1 CREATE SESSION NO
TEST1 CREATE ANY TABLE NO
with admin option
sqlplus system/password
create user test2 identified by test2;
#with admin option 代表着test2可以把create session传给其他人。
grant create session to test2 with admin option ;
create user test3 identified by test3;
sqlplus test2/test2@orcl
grant create session to test3;
exit
sqlplus test3/test3@orcl
成功!
此时回收test2权限。
sqlplus system/password
revoke create session from test2;
exit
#失败!
sqlplus test2/test2@orcl
#成功!
sqlplus test3/test3@orcl
对象权限
访问某个用户的特定对象(如表、视图等)的对象权限。
#允许用户查询EMP表中的记录
grant select on scott.emp to wang;
#允许用户更新EMP表中的记录
grant update on scott.emp to wang;
#允许用户增删改查EMP表中记录
grant all on scott.emp to wang;
sqlplus test3/test3@orcl
select * from scott.emp;
#不是不存在而是没有权限!
SQL> select * from scott.emp;
select * from scott.emp
*
ERROR at line 1:
ORA-00942: table or view does not exist
sqlplus scott/scott@orcl
grant select on emp to test3;
注意:
9i以后,system和用户本身的表都可以授权给别人
9i只能用户本身的表授权给别人
sqlplus system/password@orcl
grant select on scott.emp to test1;
角色管理

DBA包含了connect和resource角色的权限。

创建角色
create role role1;
grant create session,create table to role1;
create user test8 identified by test8;
#把该角色的所有权限授予test8用户
grant role1 to test8;
特定的角色(重点)
create user test9 identified by test9;
grant connect,resource to test9;
#成功!
conn test9/test9
#成功!
create table t1(id int);
查看角色到底包含什么权限(还是用这个把!)
sqlplus system/password
select * from dba_sys_privs d where d.grantee = 'CONNECT';
SQL> select * from dba_sys_privs d where d.grantee = 'CONNECT';
GRANTEE PRIVILEGE ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
CONNECT CREATE SESSION NO
select * from dba_sys_privs d where d.grantee = 'RESOURCE';
SQL> select * from dba_sys_privs d where d.grantee = 'RESOURCE';
GRANTEE PRIVILEGE ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
RESOURCE CREATE TRIGGER NO
RESOURCE CREATE SEQUENCE NO
RESOURCE CREATE TYPE NO
RESOURCE CREATE PROCEDURE NO
RESOURCE CREATE CLUSTER NO
RESOURCE CREATE OPERATOR NO
RESOURCE CREATE INDEXTYPE NO
RESOURCE CREATE TABLE NO
8 rows selected
SQL> select * from dba_sys_privs d where d.grantee = 'DBA';
GRANTEE PRIVILEGE ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
DBA DROP ANY CUBE BUILD PROCESS YES
DBA CREATE CUBE YES
DBA ALTER ANY CUBE DIMENSION YES
DBA ALTER ANY MINING MODEL YES
DBA DROP ANY MINING MODEL YES
DBA DROP ANY EDITION YES
DBA CHANGE NOTIFICATION YES
DBA ADMINISTER ANY SQL TUNING SET YES
DBA ALTER ANY SQL PROFILE YES
DBA CREATE RULE YES
DBA EXPORT FULL DATABASE YES
DBA EXECUTE ANY EVALUATION CONTEXT YES
DBA DEQUEUE ANY QUEUE YES
DBA DROP ANY INDEXTYPE YES
DBA ALTER ANY INDEXTYPE YES
DBA EXECUTE ANY LIBRARY YES
DBA CREATE ANY LIBRARY YES
DBA CREATE ANY DIRECTORY YES
DBA ALTER PROFILE YES
DBA EXECUTE ANY PROCEDURE YES
GRANTEE PRIVILEGE ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
DBA CREATE ROLE YES
....
查看系统空间有多少个角色
select * from dba_roles;
查看角色有的系统权限
select * from role_sys_privs r where r.role='ROLE1';
查看角色有的对象权限
select * from dba_tab_privs where rownum<5;
更改口令(密码)
alter user test1 identified by test2;
删除用户
drop user test1 cascade;
#cascade
#代表如果用户已经建了有表了。
#把用户删除掉就说把用户和表一起删除掉!
sqlplus test1/test1@orcl
create table t1(id int);
insert into t1 values(1);
insert into t1 values(2);
insert into t1 values(3);
sqlplus system/password@orcl
select * from test1.t1;
drop user test1 cascade;
select * from test1.t1;
#表也被删除了!
SQL> select * from test1.t1;
select * from test1.t1
*
ERROR at line 1:
ORA-00942: table or view does not exist
有一个大胆的想法:
sqlplus system/password@orcl
select * from test1.t1;
drop user test1;sqlplus system/password@orcl
create user test1 identified by test1;
grant connect,resource to test1;
conn test1/test1
show user;
create table t1(id int);
insert into t1 values(1);
insert into t1 values(2);
insert into t1 values(3);
sqlplus system/password@orcl
select * from test1.t1;
drop user test1;
#得带上这个`CASCADE`
drop user test1;
*
ERROR at line 1:
ORA-01922: CASCADE must be specified to drop 'TEST1'
1826

被折叠的 条评论
为什么被折叠?



