Oracle架构之用户,权限,角色讲解

发布于:2024-10-08 ⋅ 阅读:(17) ⋅ 点赞:(0)

1 用户

​在 Oracle 数据库中,为了便于管理用户所创建的数据库对象(比如数据表、索引、视图等),引入了模式的概念,这样某个用户所创建的数据库对象就都属于该用户模式。

1.1 简介

1.1.1 定义

Oracle 用户(user)就是访问 oracle 数据库的人。通过对用户的各种安全参数进行控制,以维护数据库的安全性,这些概念包括模式(schema)、权限、角色、存储设置、空间限额、存取资源限制、数据库审计等。当用户登录 Oracle 时需要进行身份认证,以便确认该用户能够进行的操作。

认证是指对需要使用数据、资源或应用程序的用户进行身份确认。通过认证后,可以为用户后面的数据库操作提供一种可靠的连接关系。Oracle 提供了多种身份认证方式:操作系统身份认证,Oracle 数据库身份认证,管理员身份认证。

  • 操作系统身份认证:主要对登录操作系统的用户的合法身份进行认证。如:sqlplus / as sysdba
  • Oracle 数据库身份认证:使用存储在数据库中的信息对试图连接数据库的用户进行身份认证。在用户连接数据库时,必须提供正确的用户名和密码,才能登录到 Oracle 数据库。
  • 数据库管理员(DBA)认证:DBA 拥有最高的管理权限,可以执行一些特殊的操作,比如关闭或启动数据库。

1.1.2 用户相关信息

1.1.2.1 用户默认表空间

表空间是信息存储的最大逻辑单位、当用户连接到数据库时,若未指出数据的目标存储表空间时,则数据存储在用户的默认表空间中。用户的默认表空间可以在创建用户时指定,也可以使用 aler user 命令指定。如果创建用户时不指定默认表空间,则普通用户的默认空间为 users,sys 用户的默认表空间为 system,可以通过 dba_users 查看(all_users 的信息要比 dba_users 少)。

1.1.2.2 用户临时表空间

临时表空间用来管理数据库排序操作以及用于存储临时表中间排序结果等临时对象。当 ORACLE 需要用到排序时,并且 PGA 中 sort_area_size 大小不足时,将会把数据放入临时表空间里进行排序。如果创建用户时,不指定默认的临时表空间,则默认临时表空间为 temp。

1.1.2.3 用户资源文件

用户资源文件用来对用户的资源存取进行限制,防止非正常连接数据库。包括:cpu 使用时间限制、内存逻辑读个数限制、每个用户同时可以连接的会话数限制、一个会话的空间和时间限制、一个会话的持续时间限制、每次会话的专用 SGA 空间限制。

创建资源文件命令如下:

create profile profile_name limit 参数 ...;

资源文件的参数如下:
connect_time:指定一个会话能保持连接到数据库的总时间
cpu_per_call:限制事务内每个调用使用CPU的时间。
cpu_per_sessin:限制每个会话内使用CPU的时间。
sessions_per_time:限制用户可以打开并发的最大会话数。
idle_time:限制用户的最大空闲时间。
logical_reads_per_session:限制数据块读取的总数目。
logical_reads_per_call:限制每个会话调用总的逻辑读取数。
private_sga:指定一个在SGA的共享池组件中分配的空间限额(仅适用于共享服务器)。

composite_limit:对资源设置使用一个总的限制。Oracle考虑用四个参数来计算加权的composite_limit。分别为:cpu_per_session, logical_reads_per_sessions, connect_time, private_sga。可以使用 alter resource cost来设置.。

密码类:
failed_login_attempts:指用户被锁之前可以尝试的最大登录数。
password_life_time:指定使用特定密码的时间限制,如果超出此时间间隔,那么密码将过期。
password_grace_time:设置一个时间段,在此时间段内将发出一个密码过期警告。
password_lock_time:设置用户被锁定的天数,过了此天数,用户将自行解锁。
password_reuse_time:指定重新使用密码要经过多少天。
password_reuse_max:指定重新使用某个特定密码前,要经过多少次修改。
passwrod_verify_function:此参数允许指定Oracle提供的密码验证函数来建立自动密码验证。

为用户指定资源文件:alter user user_name profile rofile_name;

1.1.2.4 用户表空间限额

配额大小指的是用户指定使用表空间的的大小,默认情况下用户没有配额限制。在创建或修改用户时,可以由参数 quota 指定。若用户在向表空间存储数据时,超出了此限额,则会产生错误。错误信息如:ORA-01536:space quota exceeded for tablespace tablespacename…

通过查询字典 dba_ts_quotas 查看表空间限额信息:

SQL> select tablespace_name, username, bytes/1024/1024 size_MB, max_bytes from dba_ts_quotas;
1.1.2.5 用户管理有关的数据字典

Oracle 和用户管理相关的数据字典主要有三个:DBA_USERS、USER_USERS、ALL_USERS:

  • DBA_USERS:该数据字典用于查询 Oracle 的所有用户信息
  • ALL_USERS:该数据字典用来查询所有用户的信息,但是能够查询的信息比 DBA_USERS 要少得多
  • USER_USERS:该数据字典用来查询当前用户的信息

1.1.3 用户、模式、模式对象

用户、模式、模式对象区别:

  • 用户:这里的用户并不是指数据库的操作人员,而是数据库中定义的一个名称,更准确地说它是账户,只是习惯上称其为用户。也可以说用户是用来连接数据库和访问数据库对象的。
  • 模式:在oracle中,为了便于管理用户所创建的数据库对象,引入了模式概念。模式是一个数据库对象的集合。模式为一个数据库用户所拥有,并且具有与该用户相同的名称
  • 模式对象:由用户创建的逻辑结构,用以存储或引用数据,其实就是指数据库对象

用户与模式区别:

  • 用户是连接数据库对象
  • 模式是管理数据库对象的
  • 用户与模式在oracle中是一对一关系

模式与模式对象:

  • 模式是一个数据库对象的集合。模式为一个数据库用户所有,并且具有与该用户相同的名称,比如SYSTEM模式SCOTT模式等。在一个模式内部不可以直接访问其他模式的数据库对象,即使在具有访问权限的情况下,也需要指定模式名称才可以访问其他模式的数据库对象。
  • 模式对象是由用户创建的逻辑结构,用以存储或引用数据。简单地说,模式与模式对象之间的关系就是拥有与被拥有的关系,即模式拥有模式对象;而模式对象被模式所拥有。

1.1.4 实例模式 SCOTT

Oracle 提供的 SCOTT 模式的目的,就是为了给用户提供一些实例表和数据来展示 Oracle 数据库的一些特性,通过连接到 SCOTT 用户模式,查询数据字典视图 USER_TABLES 可以获得该模式所包含的数据表,共计 4 个。
另外,用户也可以在 SYSTEM 模式下查询 SCOTT 模式所拥有的数据表,但要求使用 dba_tables数据表。

1.1.5 各个角色区别

sys和system用户的区别:

  • system:用户具有DBA权限,但是没有SYSDBA权限,用户只能用normal身份登陆。system是数据库内置的一个普通管理员,手工创建的任何用户在被授予dba角色后都跟这个用户差不多。
  • sys:用户具有SYSDBA或者SYSOPER权限,登陆也只能用这两个身份,不能用normal。SYS用户具有DBA权限,并具有SYS模式。只能通过SYSDBA登录数据库,是Oracle数据库中权限最高的帐号

normal 、sysdba、 sysoper 区别:

  • normal:是普通用户,登录后任然是登录名(show user命令)
  • sysdba:拥有最高的系统权限,sysdba登陆后是 sys (show user命令)
  • sysoper:主要用来启动、关闭数据库,sysoper 登陆后用户是 public(show user命令)

SYSOPER权限,即数据库操作员权限,权限包括:

  • 打开数据库服务器;关闭数据库服务器
  • 备份数据库;恢复数据库
  • 日志归档 ;会话限制

SYSDBA权限,即数据库管理员权限,权限包括:

  • 打开数据库服务器;关闭数据库服务器
  • 备份数据库;恢复数据库
  • 日志归档 ;会话限制
  • 管理功能; 创建数据库

1.2 用户管理

Oracle数据库中任何对象都属于一个特定用户, 用户的创建、删除、授权管理相关操作需要具备dba(数据库管理员)权限。

1.2.1 创建用户

创建用户的语法如下:

CREATE USER user_name
IDENTIFIED BY password
DEFAULT TABLESPACE tablespace_name
TEMPORARY TABLESPACE tablespace_name
PROFILE profile_name QUOTA integer|UNLIMITED ON tablespace;

说明:

  • IDENTIFIED BY password:用户口令
  • DEFAULT TABLESPACE tablespace:默认表空间。如果不指定,默认空间为 users
  • TEMPORARY TABLESPACE tablespace:临时表空间。如果不指定,默认为 temp
  • PROFILE profile|DEFAULT:用户资源文件;
  • QUOTA integer[K|M]|UNLIMITED ON tablespace:用户在表空间上的空间使用限额

查询用户的默认表空间

SQL> select username, default_tablespace, temporary_tablespace from dba_users  where username = 'WGX';

查询用户 wgx 的资源文件名
select username,profile from dba_users where username='WGX';

1.2.2 修改用户

修改用户的语法如下

该命令各部分参数的含义与 create user 完全相同
Alter User user_name
Identified by password
Default Tablespace tablespace_name
Temporary Tablespace tablespace_name
Profile profile_name
Quota integer/unlimited on tablespace;

修改相关sql

修改用户 wgx 的密码
SQL> alter user wgx identified by "WGX123456";
注:密码用双引号括起来


修改用户 wgx 的默认表空间
SQL> alter user wgx default tablespace ts003;

修改用户 wgx 的默认临时表空间
SQL> alter user wgx temporary tablespace temp03;

修改用户 wgx 的资源文件
SQL> alter user wgx profile wgx_new_profile;

查看用户 wgx 的信息
SQL> select username,default_tablespace,temporary_tablespace,profile 
     from dba_users where username ='WGX';

为用户 wgx 授予权限
SQL> grant connect,resource to wgx;
Grant succeeded.

强制用户 wgx 修改密码
SQL> Alter user wgx password expire;
User altered.

当用户 wgx 登录时强制要求修改密码
SQL> conn wgx/WGX123456
ERROR:
ORA-28001: the password has expired


为用户加锁
SQL> alter user wgx account lock;
User altered.

以 wgx 用户登录时显示用户被锁定
SQL> conn wgx
Enter password: 
ERROR:
ORA-28000: the account is locked
Warning: You are no longer connected to ORACLE.


为用户解锁
SQL> alter user wgx account unlock;
User altered.

1.2.3 用户监控

查询用户会话信息

SQL> select username, sid, serial#, machine from v$session
     where username = 'WGX';

删除用户会话信息

命令格式:
Alter system kill session 'sid, serial#';

SQL> alter system kill session '34,73';
System altered.

SQL> select username, sid, serial#,status, machine from gv$session where username ='WGX';

1.2.4 删除用户

删除用户的语法

drop user user_name [descade];

说明:如果要删除的用户包含对象,需要使用 descade 参数连同包含的对象一并删除

1.3 账户管理

1.3.1 限制 dba 用户远程登录

限制具备超级管理(sysdba)权限的用户远程登录。
设置初始化参数 remote_login_passwordfile=none,禁止 sysdba 用户远程登录

查看参数
SQL> show parameter remote_login_passwordfile

SQL> alter system set remote_login_passwordfile=none scope=spfile sid='*';
System altered.

--重启数据库,查看初始化参数 remote_login_passwordfile 的取值
SQL> show parameter remote_login_passwordfile

sqlnet.ora 中设置 SQLNET.AUTHENTICATION_SERVICES=NONE 禁止 sysdba 角色的自动登录

[grid@rac2 ~]$ cd $ORACLE_HOME/network/admin

[grid@rac2 admin]$ vi sqlnet.ora
# sqlnet.ora.rac2 Network Configuration File: /u01/app/11.2.0/grid/network/admin/sqlnet.ora.rac2
# Generated by Oracle configuration tools.
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
ADR_BASE = /u01/app/grid
SQLNET.AUTHENTICATION_SERVICES=NONE

1.3.2 用户最小权限原则

根据业务需要,为用户配置所需的最小权限。

--为用户赋予最小权限
grant 权限 to user_name;
--收回用户的多余权限
revoke 权限 from user_name;

1.3.3 数据字典保护

启用数据字典保护,只有 sysdba 用户才能访问数据字典表。设置初始化参数 O7_DICTIONARY_ACCESSIBILITY 为 false。

SQL> show parameter o7

2 权限

2.1 简介

权限是用户对一项功能的执行权力。每个 Oracle 用户都拥有一些由其创建的表、视图和其他资源。Oracle 系统提供三种权限:对象级(Object),系统级(System),角色级(Role)。

这些权限可以授予给用户、特殊用户 public 或 角色,如果授予一个权限给特殊用户 Public(用户 public 是 Oracle 预定义的,每个用户享有这个用户享有的权限),则意味作将该权限授予了该数据库的所有用户。

Oracle 角色(role)是一组权限(privilege)。可以给角色授予指定的权限,然后将角色赋给相应的用户。对管理权限而言,角色是一个工具,权限能够被授予给一个角色,角色也能被授予给另一个角色或用户。用户可以通过角色继承权限,除了管理权限外角色服务没有其它目的。

2.2 权限分类

Oracle 中,根据系统管理方式不同,将权限分为系统权限与实体权限两类。

  • 系统权限:是指被授权用户是否可以连接到数据库上,在数据库中可以进行哪些系统操作。
  • 实体权限:是指用户对具体的模式实体(schema)所拥有的权限。

2.2.1 系统权限管理

2.2.1.1 系统权限分类

系统权限分类:

  • DBA:拥有全部特权,是系统最高权限,只有 DBA 才可以创建数据库结构。
  • RESOURCE:拥有 Resource 权限的用户可以创建实体,不可以创建数据库结构。
  • CONNECT:拥有 Connect 权限的用户只可以登录 Oracle,不可以创建实体,不可以创建数据库结构。

对于普通用户:可以授予 connect、resource 权限。
对于DBA 用户:授予 connect、resource、dba 权限。

2.2.1.2 系统权限操作
系统权限授权:系统权限授权,系统权限只能由 DBA 用户授出,命令如下:
grant connect, resource, dba to 用户名1 [,用户名2]...;

查看系统权限:
使用DBA_SYS_PRIVS 查看系统权限
select * from dba_sys_privs where grantee='CONNECT';

系统权限传递:
授予权限时使用 WITH ADMIN OPTION选项,则得到的权限可以传递,即用户可以把自己的系统再授予其他用户。
grant connect, resource, dba to white with admin option;

系统权限回收:
系统权限无级联,即 A 授予 B 权限,B 授予 C 权限,如果 A 收回 B 的权限,C 的权限不受影响
Revoke connect, resource from 用户名1; 

2.2.2 实体权限管理

实体权限分类:select、update、insert、alter、index、delete、all、execute
DBA 用户可以操作全体用户的任意基表,无需授权。
使用 sys 账户为 white 用户和 black 用户创建表,并输入数据:

SQL> show user
USER is "SYS"
SQL> create table white.t1(x int,name varchar2(20));
                  *
SQL> insert into white.t1 values(1,'white:t1');

SQL> create table black.t22(x int,name varchar2(20));

SQL> insert into black.t22 values(1,'black:t22');

授权相关

为 white 用户授予实体权限
SQL> grant select on scott.emp to white;

实体权限传递授权:授权时使用 with grant option 参数可实现实体权限的传递授权。

SQL> grant select on scott.dept to white with grant option;

实体权限的回收:收回white 用户针对 scott.emp 对象的查询权限
如果收回某个用户的对象权限,那么对于这个用户使用 WITH GRANT OPTION 授予权限的用户来说,同样还会收回这些用户的相同权限,也就是说回收授权是级联的

SQL> revoke select on scott.emp from white;

将对象权限授予全体用户

将对象 white.t1 的查询权限授予所有用户
SQL> grant select on white.t1 to public;
Grant succeeded.

2.3 查询用户权限

ORACLE 的数据字典分为:USER,ALL 和 DBA

  • USER_*:有关用户所拥有的对象信息,即用户自己创建的对象信息。
  • ALL_*:有关用户可以访问的对象的信息,即用户自己创建的对象的信息加上其他用户创建的对象但该用户有权访问的信息。
  • DBA_*:整个数据库中对象的信息。

与用户权限相关的数据字典表有:

  • 系统权限
    所有用户和角色所拥有的系统权限,使用 where grantee=‘*’ 查询指定用户或角色所拥有的系统权限:DBA_SYS_PRIVS
    当前用户所拥有的系统权限:USER_SYS_PRIVS
    某个角色所拥有的系统权限:ROLE_SYS_PRIVS
  • 对象权限
    所有用户的对象权限:DBA_TAB_PRIVS
    所有用户的对象权限:ALL_TAB_PRIVS
    当前用户的对象权限:USER_TAB_PRIVS
    角色所拥有的对象权限:ROLE_TAB_PRIVS
  • 当前会话的权限
    当前用户所拥有的系统权限和对象权限:SESSION_PRIVS
    当前用户被激活的角色:SESSION_ROLES
  • 角色信息
    所有角色:DBA_ROLES
    授予用户的角色:DBA_ROLE_PRIVS

3 角色

角色(role)是一组权限的集合,将角色赋给一个用户,这个用户就拥有了这个角色中的所有权限。

3.1 系统预定义角色

预定义角色是在数据库安装后,系统自动创建的一些常用的角色。查询角色所包含的权限可以使用以下语句:

SQL> select * from role_sys_privs where role='RESOURCE';
  • CONNECT,RESOURCE,DBA
    这些预定义角色主要用于数据库管理。Oracle 建议用户自己设计数据库管理和安全的权限规划,而不要简单的使用这些预定角色。
  • DELETE_CATALOG_ROLE,EXECUTE_CATALOG_ROLE,SELECT_CATALOG_ROLE
    这些角色主要用于访问数据字典视图和包。
  • EXP_FULL_DATABASE,IMP_FULL_DATABASE
    这两个角色用于数据导入导出工具的使用。
  • AQ_USER_ROLE,AQ_ADMINISTRATOR_ROLE
    这两个角色用于 Oracle 高级查询功能。
  • SNMPAGENT
    用于Oracle enterprise manager 和 Intelligent Agent
  • RECOVERY_CATALOG_OWNER
    用于创建拥有恢复库的用户。

3.2 管理角色

3.2.1 一般操作

创建角色
create role role_name;
创建带有口令的角色
create role class_manager identified by Wgx123456;

SQL> create role teacher;
SQL> create role student;

为角色授权
SQL> grant create any table, create procedure to teacher;
SQL> grant SELECT ANY TABLE to student;

授予角色给用户
SQL> grant teacher to white;
SQL> grant student to black;

查看用户 while 和 black 包含的角色:
SQL> select * from dba_role_privs where grantee='WHITE';
SQL> select * from dba_role_privs where grantee='BLACK';

查看角色所包含的权限
SQL> select * from role_sys_privs where ROLE='TEACHER';
SQL> select * from role_sys_privs where ROLE='STUDENT';

3.2.2 为角色添加或删除口令

为角色添加口令
SQL> alter role teacher identified by Tea123456;
删除角色的口令
SQL> alter role teacher not identified;

3.2.3 设置当前用户要生效的角色

假设 user1 用户有 b1、b2、b3 三个角色,那么如果 b1 未生效,则 b1 所包含的权限对于用户 user1 来讲是不拥有的,只有角色生效了,角色内的权限才作用于用户。最大可生效角色数由参数 MAX_ENABLED_ROLES 设定:

SQL> show parameter  MAX_ENABLED_ROLES

用户登录后,oracle 将所有直接赋给用户的权限和用户默认角色中的权限赋给用户。

SQL> select * from SESSION_ROLES;

SQL> create user boss identified by Boss123456;
SQL> create role manager;

SQL> grant connect,resource,dba to manager;
SQL> grant manager,teacher,student to boss;

使boss 用户的角色生效:

--设置所有角色失效
SQL> set role none;

SQL> select * from session_roles;
no rows selected

使 teacher 生效
SQL> set role teacher;

--使 connect,student 生效
SQL> set role student,connect;

--使除了 student 外的该用户的所有其它角色生效
SQL> set role all except student;

3.2.4 默认角色/删除角色

修改用户,设置其默认角色

SQL> alter user boss default role teacher;

删除角色
角色删除后,原来拥用该角色的用户就不再拥有该角色了,相应的权限也就没有了。

SQL> drop role student;
Role dropped.