本文转自:https://blog.csdn.net/yu102655/article/details/53301363

一、Oracle 用户,权限,角色的概念
1、用户
(1)对数据库的访问需要以适当的身份通过验证,这就是用户的作用;每个Oracle用户都有自己的用户名和密码,并且拥有他们所创建的任意表、视图和其他资源,需要注意的是新创建的用户连最基本的访问登入Oracle的权限都没有,所以后续需要授予不同的权限和角色来达成不同的操作目的。
(2)用户,就是真正可以操作数据库的对象了,一个用户可以拥有0个或多个角色。用户分为普通用户和特权用户。普通用户就不赘述了,特权用户是指拥有特殊权限(sysdba、sysoper)的数据库用户。我们可以通过下面的语句查看数据库的特权用户:
select * from v$pwfile_users;
如果参数REMOTE_LOGIN_PASSWORDFILE的值为EXCLUSIVE,那么就可以将sysdba和sysoper权限授予其它用户。但是当以特权用户身份登录时,必须带有as sysdba或as sysoper选项。

2、权限
(1)权限管理是 Oracle 系统的精华,不同用户登录到同一数据库中,可能看到不同数量的表,拥有不同的权限。权限一般分为系统权限和对象权限,系统权限可以通俗地理解为将数据库对象从无到有或从有到无的创建操作,比如说创建和删除表、视图、存储过程、session等这些操作都可以认为是系统权限;对象权限赋予了你在不同的数据库对象上操作的能力,比如DELETE权限允许你对表和视图删除行,SELETE权限允许你对表、视图、序列等进行查询操作!至于系统权限和对象权限分别有哪些,具体请参照Oracle官网。
(2)ORACLE系统提供三种权限:Object 对象级、System 系统级、Role 角色级。这些权限可以授予给用户、特殊用户public或角色,如果授予一个权限给特殊用户”Public”(用户public是oracle预定义的,每个用户享有这个用户享有的权限),那么就意味作将该权限授予了该数据库的所有用户。对管理权限而言,角色是一个工具,权限能够被授予给一个角色,角色也能被授予给另一个角色或用户。用户可以通过角色继承权限,除了管理权限外角色服务没有其它目的。权限可以被授予,也可以用同样的方式撤销。

3、角色
(1) ORACLE有许多的系统权限,如果一个一个地把它们分配给用户,管理起来相当的不方便,所以我们引入了角色这个概念。如果多个新建用户需要后续赋予10不等的不同权限,一般方法是需要将10个不等的权限分别列出来进行授予,不但麻烦而且重用性不高,角色的出现就是为了解决这个问题。Oracle角色是一组权限的集合。正常情况下我们可以授予角色一些权限,然后将角色分配给适当的用户。
这样,就方便了用户的管理,通过一个角色授权语句就可以将很多的系统权限授予给用户。
(2)系统已经预定义好了一些角色,我们查看某一角色所具有的系统权限时,用下面的语句:
select * from role_sys_privs where role=’角色名’;
如果参数REMOTE_LOGIN_PASSWORDFILE的值为EXCLUSIVE,那么就可以将sysdba和sysoper权限授予其它用户。但是当以特权用户身份登录时,必须带有as sysdba或as sysoper选项。

二、Oracle 用户,权限,角色的语法知识
1、用户
1.用户管理:
创建用户(指定密码)
create user itcast identified by password;

由于scott普通用户没有权限创建用户,因此先登录管理员用户,
在cmd窗口中,

SQL> conn / as sysdba
已连接。
登陆上管理员用户。

2.修改密码
alter user itcast identified by password2;

3.锁定与解锁用户
alter user itcast account lock;
alter user itcast account unlock;

4.删除用户
drop user xx;

2、权限
授予权限
grant 权限1,权限2,… to 用户;

收回权限
revoke 权限1,权限2,… from 用户;

设置用户的空间配额
alter user itcast quota unlimited on users;
quota 容量的意思
unlimited 无限制
on users 在users这个表空间上没有限制

其中,oracle中create session系统权限,是创建会话的权限。
create session就是允许使用这个用户在服务器上创建session。通俗的说,就是允许这个用户登录。
oracle中应该很多角色应该都包含这个系统权限。

查询管理员拥有的权限,select * from session_privs;
会发现,拥有208行权限。

3、角色
创建角色
create role role1;

给角色授予权限
grant create session, create table, create view to role1;

给角色收回权限
revoke create session from role1;

删除角色
drop role role1;

三、实例测试:创建用户和授予权限
1、创建用户和授予权限

1.连接管理员用户,conn / as sysdba
2.创建一个新用户, create user itcast identified by password;
3.授予新用户itcast的登录权限,create session就是允许使用这个用户在服务器上创建session。通俗的说,就是允许这个用户登录。 grant create session to itcast;
4.授予新用户itcast的建表权限,grant create table to itcast;
5.再登录新用户itcast,sqlplus itcast/password
6.登录用户itcast后,建表,create table test (id number);
7.虽有建表的权限,但是出现磁盘空间使用的问题,还没有给它指定有多少磁盘空间使用的权限。
出现的问题: ORA-01950:对表空间’USER’无权限
8.给用户itcast分配磁盘空间,分配了无限空间, alter user itcast quota unlimited on users;
9.再次建表,create table test (id number); 表已创建
10.建了表后,我们再来通过视图的方式来查询表, create view myview as select * from itcast;
在cmd窗口中结果如下:
SQL> create view myview as select * from itcast;
create view myview as select * from itcast *
第 1 行出现错误:
ORA-00942: 表或视图不存在
(1)我们起初以为是缺少授予创建视图的权限,好了,这次授予新用户itcast的视图权限,
grant create view to itcast;
(2)再次创建视图,create view myview as select * from itcast; 还是出现下面的问题
SQL> create view myview as select * from itcast;
create view myview as select * from itcast *
第 1 行出现错误:
ORA-00942: 表或视图不存在
(3)原因是,我们还需要创建过程,函数等等常用的权限。这样很麻烦,因此,这时,角色的作用就体现出来了。角色就是把一堆权限给一个角色,新用户只要使用这个角色,就能有这一堆权限了。

2、相关的截图
用户口令如下:

测试截图:

 

四:角色
1.角色:
例如:有经理,员工1,员工2;
经理:查询、更新、删除、插入
员工:查询、更新
可以有两个角色
HR_EMP 两个权限
HR_MGR 继承HR_EMP,自己还有两个权限,共4个。

2.要求要有create role权限,才可以创建角色,可以使用管理员操作。
conn / as sysdba
create role role1; // 这时这个角色没有任何权限。

把权限授予给角色
grant create session to role1;

角色继承:
create role role2;
grant create table,role1 to role2; // 相当于把role1当成一个组合的新权限使用,与普通权限一样使用,这就是继承角色了。

把角色授予角色
grant role1 to aa;

3.Oracle实现预置好了一些角色:
CONNECT
RESOURCE
DBA

对于普通用户,一般要有CONNECT与resource。
例:
create user mytest2 identified by password;
grant connect, resource to mytest2;
一般就是这样用的,创建完用户后就会指定权限。
在RESOURCE角色中就含有空间配额

4.预定义角色和权限如图

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐