oracle学习笔记-用户与权限管理-(12)

时间:2021-11-26 07:43:43
一、用户管理
        在oracle中存在三类用户:sysdba、sysoper、普通用户。前两类用户为特权用户,拥有数据库的所有权限,特权用户的相关信息可以从动态性能视图v$pwfile_users中获得。
SQL> select * from v$pwfile_users;

USERNAME SYSDBA SYSOPER SYSASM
----------------------------- ---------- ---------- ----------
SYS TRUE TRUE FALSE
        创建用户只能由sys用户完成,或者拥有CREATE USER权限的用户。
        创建用户的语法格式如下:
CREATE USER user_name IDENTIFIED BY password
DEFAULT TABLESPACE tbs_name
TEMPORARY TABLESPACE temp_tbs_name
QUOTA tbs_size ON tbs_name
PASSWORD EXPIRE
ACCOUNT LOCK|UNLOCK
         QUOTA子句为用户在表空间上指定空间配额,可以KB、MB等为单位,或UNLIMITED指定为无限制的空间配额,或授予用户UNLIMITED TABLESPACES系统权限。
         PASSWORD EXPIRE子句指定用户在第一次登陆时必须修改密码。
         ACCOUNT指定用户账号的状态。
         用户创建之后可通过ALTER USER命令修改用户的相关信息。
         删除用户:
SQL>DROP USER user_name;
        但是当用户下存在对象时,需要使用CASCADE选项进行删除:
SQL>DROP USER user_name CASCADE;
      此时创建了用户并不能进行登录,需要对用户赋予相应权限之后才能进行登录。
SQL> conn test1/test@lsjcom
ERROR:
ORA-01045: 用户 TEST1 没有 CREATE SESSION 权限; 登录被拒绝

二、 用户权限的管理
        Oracle中用户权限有两类,一类是系统权限,包括对数据库对象的增、删、改,对数据库的创建和备份等;另一类是数据库权限,主要是针对数据库对象的访问权限。
                                  表2-1 常用的系统权限

系统权限

说明

Create cluster

在自己的模式中创建簇的权限

Create procedure

在自己的模式中创建存储函数、存储过程、程序包的权限

Create session

登录数据库的权限

Create table

在自己的模式中创建表的权限

Create tablespace

在自己的模式中创建表空间的权限

Unlimited tablespace

在任意表空间都有无限空间配额的权限

Create trigger

在自己的模式中创建触发器的权限

Create user

创建用户的权限

Create view

在自己的模式中创建视图的权限


更多的系统权限:
http://docs.oracle.com/database/121/SQLRF/statements_9013.htm#BABEFFEE
                                          表2-2 常用的对象权限

对象权限

说明

ALTER

修改表和序列的权限

SELECT

对数据库对象中的数据的查询权限

INSERT

对数据库对象中的数据插入的权限

DELETE

对数据库对象中的数据删除的权限

UPDATE

对数据库对象中的数据更新的权限

REFERENCES

可以与一个表建立关联关系的权限,在授予权限时可以指定列,也可以不指定

EXECUTE

执行存储函数、存储过程和程序包的权限

RENAME

重命名数据库对象的权限


更多对象权限:
http://docs.oracle.com/database/121/SQLRF/statements_9013.htm#BGBCIIEG
为用户授予系统权限的语法格式如下:
SQL>GRANT 权限,… TO user,… [WITH ADMIN OPTION];
为用户授予对象权限的语法格式如下:
SQL>GRANT 权限(列名),… ON 对象 TO user,… [WITH ADMIN OPTION]
其中WITH ADMIN OPTION子句使得权限的获得者可以将权限再分配给其他用户。
回收用户系统权限的语法格式如下:
SQL>REVOKE 权限,… FROM user,…
回收用户对象权限的语法格式如下:
SQL>REVOKE 权限,… ON 对象 FROM user,…;
当回收所有权限时,可以使用REVOKE ALL

三、 与权限相关的数据字典

权限类型

数据字典视图

说明

系统权限

system_privilege_map

当前数据库中已经定义的所有系统权限

dba_sys_prvis

任何用户所具有的系统权限(sys用户)

user_sys_privs

用户自己所拥有的系统权限

session_privs

一个用户在当前会话中所具有的权限

对象权限

dba_tab_privs

任何用户所具有的对象权限

dba_col_privs

任何用户在列上所具有的权限

user_tab_privs

用户自己所拥有的对象权限

user_col_privs

用户自己所拥有的列的权限


四、 角色管理
角色是一组权限的集合,使权限管理更加方便。数据库中有两类角色,一类是oracle预定义角色,一类是用户自定义角色。

角色名称

所包含权限

CONNECT

CREATE SESSION

RESOURCE

CREATE CLUSTER,

CREATE INDEXTYPE,

CREATE OPERATOR,

CREATE PROCEDURE,

CREATE SEQUENCE,

CREATE TABLE,

CREATE TRIGGER,

CREATE TYPE.

DBA

可通过DBA_SYS_PRIVS数据字典查看


更多Oracle预定义的角色:
http://docs.oracle.com/database/121/DBSEG/authorization.htm#DBSEG4414
1、 创建角色:
SQL>CREATE ROLE role_name;
2、 删除角色:
SQL>DROP ROLE role_name;
3、 向角色授予权限
授予系统权限:
SQL>GRANT 权限,… TO role_name [WITH ADMIN OPTION];
授予对象权限:
SQL>GRANT 权限,… ON 对象 TO role_name;
4、 回收权限:
SQL>REVOKE ………… FROM………
5、 角色的分配:
SQL>GRANT role_name TO user1;
6、 角色的回收
SQL>REVOKE role_name FROM user;
7、 与角色有关的数据字典
1) dba_roles:数据库中的所有角色
2) dba_role_privs:所有被授予用户或另一角色的角色
3) user_role_privs:所有被授予当前用户的角色
4) role_role_privs:一个角色中包含的其它角色
5) role_sys_privs:一个角色中包含的系统权限
6) role_tab_privs:一个角色中包含的对象权限
7) session_roles:当前会话中所使用的角色

五、 PROFILE
PROFILE是一种数据库对象,用来对用户口令的使用情况和资源消耗情况进行控制。可通过dba_users查看对用户指定的profile,以及通过dba_profiles查看一个profile所施加的限制。
创建PROFILE的命令格式:
SQL>CREATE PROFILE profile_name LIMIT
口令限制
资源限制
1、 口令限制
1) FAILED_LOGIN_ATTEMPTS:允许失败的登录次数,到达指定的失败次数后账户将被锁定。
2) PASSWORD_LOCK_TIME:账号登录失败被锁定后的锁定时间
3) PASSWORD_LIFF_TIME:口令有效期
4) PASSWORD_GRACE_TIME:口令有效期的延长期
5) PASSWORD_REUSE_TIME:为了再次使用过去的口令,必须经过的天数。
6) PASSWORD_REUSE_MAX:为了再次使用过去的口令,必须使用不同口令的次数。
2、 资源限制
为了使PROFILE的资源限制起作用需要修改初始参数RESOURCE_LIMIT=TRUE:
SQL>ALTER SYSTEM set RESOURCE_LIMIT=TRUE;
1) SESSION_PER_USER:一个用户所允许的并发会话数目
2) CPU_PER_SESSION:用户在一个会话内所使用的CPU时间的总和,时间单位为0.01s
3) LOGICAL_READS_PER_SESSION:用户在一个会话内所能访问的数据块的数量
4) CONNECT_TIME:一个用户会话所能持续的时间,单位分钟
5) IDLE_TIME:一个用户会话所允许的连续的空闲时间,单位分钟
6) PRIVATE_SGA:在共享模式的连接模式下,这个参数用来为一个用户会话所分配的SGA空间
7) CPU_PER_CALL:用户执行的每条命令所使用的CPU时间,时间单位为0.01s
8) LOGICAL_READS_PER_CALL:用户执行的每条命令所能访问的数据块的数量。
将PROFILE指定给用户:
SQL>CREATE USER user_name IDENTIFIED pwd PROFILE pro_name;
SQL>ALTER USER user_name PROFILE pro_name;
删除PROFILE:
SQL>DROP PROFILE pro_name [CASCADE/*若PROFILE已经指定给了用户*/]