Oracle+11g+笔记(6)-数据库用户管理

Oracle+11g+笔记(6)-数据库用户管理

6、数据库用户管理

6.1 权限授予

6.1.1 直接授权

直接授权是指通过GRANT语句直接把权限授予用户,包括系统权限的授权和对象权限的授权两种情况。

6.1.1.1 系统权限的授权

在创建用户后,如果没有给用户授予相应的系统权限,则用户不能连接到数据库,因为该用户缺少创建会话的权

限。

在数据库中要进行某一种操作时,用户必须具有相应的系统权限,系统权限是由数据库管理员为用户授予的。向用

户授予权限语句为GRANT,其语法格式为:

GRANT 系统权限 TO {PUBLIC|role|usemame}[WITH ADMIN OPTION]

提示:在为用户授权时,可以使用WITH ADMIN OPTION选项,表示该用户可以将其所有权再授予其他用户,并且

该用户还可以将授予的权限再回收。

Oracle数据库中,用户SYSTEMSYS是数据库管理员,它具有DBA所有系统权限,包括

SELECT ANY DICTIONARY权限,所以SYSTEMSYS用户可以查询数据字典中以DBA开头的数据字典视图、创建

数据库结构等。

Oracle 11g中有206个系统权限。可以在数据字典表SYSTEM_PRIVILEGE_MAP中看到所有这些权限,用

SELECT语句可以查询这些权限。

SELECT * FROM SYSTEM_PRIVILEGE_MAP;

PRIVILEGE|NAME                          |PROPERTY|
---------+------------------------------+--------+
       -3|ALTER SYSTEM                  |       0|
       -4|AUDIT SYSTEM                  |       0|
       -5|CREATE SESSION                |       0|
       -6|ALTER SESSION                 |       0|
       -7|RESTRICTED SESSION            |       0|
      -10|CREATE TABLESPACE             |       0|
      -11|ALTER TABLESPACE              |       0|
      -12|MANAGE TABLESPACE             |       0|
      -13|DROP TABLESPACE               |       0|
      -15|UNLIMITED TABLESPACE          |       0|
      -20|CREATE USER                   |       0|
      -21|BECOME USER                   |       0|
      -22|ALTER USER                    |       0|
      -23|DROP USER                     |       0|
      -30|CREATE ROLLBACK SEGMENT       |       0|
......
SELECT count(*) FROM SYSTEM_PRIVILEGE_MAP;

COUNT(*)|
--------+
     208|

提示:系统权限中有一种ANY权限,具有ANY权限的用户可以在任何用户模式中进行操作。

系统权限可以划分为群集权限、数据库权限、索引权限、过程权限、概要文件权限、角色权限、回退段权限、序列

权限、会话权限、同义词权限、表权限、表空间权限、用户权限、视图权限、触发器权限、专用权限、其他权限

等。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

connect sys/sysroot as sysdba;
create user User1 identified by 123456;
GRANT sysdba to User1;
connect User1/123456 as sysdba;
connect sys/sysroot as sysdba;
SQL> create user User2 identified by 123456
  2  DEFAULT TABLESPACE users
  3  TOMPORARY TABLESPACE temp;
GRANT create session to User2;
6.1.1.2 对象权限的授予

对象权限是用户之间的表、视图、序列等模式对象的相互存取操作的权限。对属于某一用户模式的所有模式对象,

该用户对这些模式对象具有全部的对象权限,也就是说,模式的拥有者对模式中的对象具有全部对象权限。同时,

模式的拥有者还可以将这些对象权限授予其他用户。

按照不同的对象类型,Oracle数据库中设置了不同种类的对象权限。对象权限及对象之间的对应关系如表所示。

在这里插入图片描述

对象权限由该对象的拥有者为其他用户授权,非对象的拥有者不得为对象授权,将对象权限授出后,获权用户可以

对对象进行相应的操作,没有授予的权限不得操作。对象权限被授出后,对象的拥有者属性不会改变,存储属性也

不会改变。

使用GRANT语句可以将对象权限授予指定的用户、角色、PUBLIC公共用户组,其语法格式如下:

GRANT [object_privilege|ALL[PRIVILEGES]ON[schema.]object TO{user|role|PUBLIC}

其中,对象权限是上表中某一类对象的相应权限,多个权限之间用逗号隔开,多个用户名之间也用逗号隔开,角色

表示数据库中已创建的角色。PUBLIC 表示将该对象权限授予数据库中全体用户。

一个用户没有其他用户的对象权限,所以不能访问其他用户的对象。但是,如果把另外一个用户的某种对象权限授

予该用户,该用户就具备了相应的访问对象的权限。

SQL>CONNECT hr/hrroot
SQL>GRANT select,insert,update ON employees TO User2;
SQL>CONNECT User2/123456;
SQL>SELECT FIRST_NAME,LAST_NAME,JOB_ID,SALARY FROM hr.employees where salary>15000;
SQL> SELECT FIRST_NAME,LAST_NAME,JOB_ID,SALARY FROM hr.employees where salary>15000;

FIRST_NAME           LAST_NAME                 JOB_ID         SALARY
-------------------- ------------------------- ---------- ----------
Steven               King                      AD_PRES         24000
Neena                Kochhar                   AD_VP           17000
Lex                  De Haan                   AD_VP           17000
6.1.2 授权角色

可以使用角色为用户授权,同样也可以从用户中回收角色。由于角色集合了多种权限,所以当为用户授予角色时,

相当于为用户授予了多种权限。这样就避免了向用户逐一授权,从而简化了用户权限的管理。

在为用户授予角色时,既可以向用户授予系统预定义的角色,也可以自己创建角色,然后再授予用户。在创建角色

时,可以为角色设置应用安全性。角色的应用安全性是通过为角色设置密码进行保护的,只有提供正确的密码才能

允许修改或设置角色。

提示:权限、角色不仅可以被授予用户,也可以被授予用户组(public)。当将权限或角色授予public之后,会使得

所有用户都具有该权限或角色。

通过查询数据字典DBA_ROLES可以了解数据库中全部的角色信息,其查询语句如下:

SELECT * FROM dba_roles;
ROLE                       |PASSWORD_REQUIRED|AUTHENTICATION_TYPE|
---------------------------+-----------------+-------------------+
CONNECT                    |NO               |NONE               |
RESOURCE                   |NO               |NONE               |
DBA                        |NO               |NONE               |
SELECT_CATALOG_ROLE        |NO               |NONE               |
EXECUTE_CATALOG_ROLE       |NO               |NONE               |
DELETE_CATALOG_ROLE        |NO               |NONE               |
EXP_FULL_DATABASE          |NO               |NONE               |
IMP_FULL_DATABASE          |NO               |NONE               |
LOGSTDBY_ADMINISTRATOR     |NO               |NONE               |
DBFS_ROLE                  |NO               |NONE               |
AQ_ADMINISTRATOR_ROLE      |NO               |NONE               |

DBA角色拥有所有系统级权限。通常,角色CONNECTRESOURCEDBA主要用于数据库管理。对于数据库管理

员需要分别授予CONNECTRESOURCEDBA角色。对于数据库开发用户需要分别授予CONNECTRESOURCE

色。

如果系统预定义的角色不符合用户的需要,数据库管理员还可以创建更多的角色。

创建角色的用户必须具有CREATE ROLE系统权限。

在角色刚刚创建时,它并不具有任何权限,这时的角色是没有用处的。因此,在创建角色后,通常还需要立即为它

授予权限。

create role access_database;
GRANT create session,create table,create view to access_database;
GRANT access_database to User1;

注意:在一个GRANT语句中,可以同时为用户授予系统权限和角色,但不能同时授予对象权限和角色。

在创建角色时也可以为角色指定密码,带有密码的角色在修改时,必须提供密码,否则系统将拒绝对角色的修改,

CREATE role manager identified by 123456;
GRANT create session,create table to manager;

Oracle 数据库中,数据库管理员通常通过角色来管理系统权限,即将角色授予用户,而不是直接为用户授予系统

权限。在实际的应用中,可以将用户分组,同组用户使用同一角色,这样他们的权限就相同,当需要为用户增加或

减少权限时,只要为角色增加或减少权限即可。

将角色授予用户后,角色信息被存储在用户数据字典USER_ROLE_PRIVS中,通过查询该数据字典可以了解用户自

己所具有的角色:

select username,granted_role,admin_option from user_role_privs;
SQL> select username,granted_role,admin_option from user_role_privs;

USERNAME                       GRANTED_ROLE                   ADM
------------------------------ ------------------------------ ---
HR                             PLUSTRACE                      NO
HR                             RESOURCE                       NO

查看角色拥有的权限:

 select * from role_sys_privs where role='ACCESS_DATABASE'   
ROLE           |PRIVILEGE     |ADMIN_OPTION|
---------------+--------------+------------+
ACCESS_DATABASE|CREATE TABLE  |NO          |
ACCESS_DATABASE|CREATE VIEW   |NO          |
ACCESS_DATABASE|CREATE SESSION|NO          |
6.1.3 使用 ALTER USER 语句修改用户的默认角色

默认角色是当用户登录到数据库时由Oracle自动启用的一种角色。当某一角色被授予用户后,该角色即成为该用

户的默认角色。可以使用ALTER USER语句来修改用户的默认角色。语法格式如下:

ALTER USER useuname [default role[role_name[,role_name,...]] | all [except role_name[,
role_name,...]] | none];

其中,default role表示默认角色;使用关键字all可以设置该用户的所有角色;使用except则可以设置某角

色外其他所有角色生效;none则设置所有角色为失效状态。

1、设置用户角色失效

要使用户的角色失效,可以使用ALTER USER USER_NAME DEFAULT ROLE NONE 语句。

connect sys/sysroot as sysdba;
alter user user1 default role none;

用户的角色失效后,该用户角色中的权限将全部丢失。用户连接数据库权限CREATE SESSION存储于ACCESS

DATABASE中,当该角色失效后,用户user1将不能再登录到数据库中。

2、设置用户角色生效

用户的默认角色失效后,可以重新设置为生效。设置为生效后,用户的相应权限又可以再次被使用。修改用户的角

色生效语句如下:

ALTER USER USER_NAME DEFAULT ROLE ALL
ALTER USER user1 DEFAULT ROLE ALL

提示:使用ALTER USER USER_NAME DEFAULT ROLE ALL EXCEPT命令,可以启用除某个角色之外的其他所有角

色。

6.1.4 使用SET ROLE控制角色使用

可以为数据库用户的会话启用或禁用角色。如果数据库管理员没有为用户取消所有默认角色,则该用户的会话将启

用所有已经授予的角色。可以通过查询数据字典视图SESSION_ROLES,查看当前数据库会话启用了哪些角色。

可以使用SET_ROLE语句控制角色失效或生效。SET ROLE 语句的语法为:

SET ROLE[role [identified by password][,role[identified by password]...]|ALL[EXCET role[,
role]] | NONE];

其中,使用带ALL选项的SET ROLE语句时,将启用用户被授予的所有角色,使用ALL 选项有一个前提条件是该用

户的所有角色不得设置密码。EXCEPT ROLE表示除指定的角色外,启用其他全部角。NONE表示使用户的所有角色

失效。

【演示启用/禁用角色】

# step1 使user1用户没有默认角色
connect sys/sysroot as sysdba;

alter user user1 default role none;

grant connect,resource to user1;

alter user user1 default role connect,resource;

select GRANTED_ROLE,ADMIN_OPTION,DEFAULT_ROLE from dba_role_privs where GRANTEE = 'USER1';
GRANTED_ROLE   |ADMIN_OPTION|DEFAULT_ROLE|
---------------+------------+------------+
ACCESS_DATABASE|NO          |NO          |
CONNECT        |NO          |YES         |
RESOURCE       |NO          |YES         |
# step2 以用户user1登录到数据库,查看SESSION ROLES视图确认会话所用的角色
connect user1/123456;

select * from session_roles;

ROLE|
-----------+
CONNECT
RESOURCE

可以看出,ACCESS DATABASE角色已不再有效,用户当前的会话只启用了CONNECTRESOURCE角色。

# step3 为当前数据库会话启用ACCESS DATABASE角色
connect user1/123456;

set role access_database;

select * from session_roles;

ROLE
------------------------------
ACCESS_DATABASE

可以看出,SETROLE强制当前会话使用ACCESS DATABASE角色。

# step SET ROLE NONE语句强制当前会话禁用所有角色,这样当前用户的会话将失去所有权限

conn user1/123456;

set role none;

select * from session_roles;

------------------------------
未选定行

create table temp (id number,name varchar2(20)) tablespace USERS;

------------------------------
第1行出现错误:
ORA-01031:权限不足

6.2 回收权限

当用户不使用某些权限时,就尽量收回权限,只保留其最小权限。包括回收权限、撤销角色、删除数据库对象和删

除用户。

6.2.1 逐一回收

如果用户的某一权限不使用时,可以使用REVOKE语句逐一回收的方式收回权限。

1、系统权限的回收

数据库管理员或者具备向其他用户授权的用户都可以使用REVOKE语句将授予的权限回收。REVOKE语句格式如

下:

REVOKE 系统权限 FROM  {PUBLIC|role|usemame}
CONNECT sys/sysroot AS sysdba
REVOKE select any dictionary FROM scott;

用户的系统权限被回收后,相应的权限传递同时被回收。在回收系统权限时,经过传递获得的权限的用户不受影

响。

2、对象权限的回收

对象的拥有者可以将授出的权限收回,回收对象权限可以使用REVOKE语句,使用该语句回收对象权限的语法如

下:

REVOKE { object-privilege | ALL [PRIVILEGES]} ON [schema.]object FROM{user|role|
PUBLIC};

回收对象权限时,授权者只能从自己授权的用户那里回收对象权限。如果被授权用户基于一个对象权限创建了过

程、视图,那么当回收该对象权限后,这些过程、视图将变为无效。

CONNECT hr/hrroot
REVOKE select on employees from user1;
CONNECT hr/hrroot
REVOKE all on employees from public;

在回收对象权限时,经过传递获得权限的用户会受到影响。

6.2.2 删除角色

如果不再需要某个角色或者某个角色的设置不太合理时,就可以使用DROP ROLE来删除角色,使用该角色的用户

的权限同时也被回收。

conn sys/sysroot
DROP ROLE access_database;
6.2.3 删除数据库对象

Oracle数据库对象中最基本的是表和视图,其他还有约束、序列、函数、存储过程、包、触发器、索引等。删除

数据库对象后,也就删除了用户或角色对该数据库对象的访问权限。

删除数据库表使用DROP TABLE命令,其语法格式为:

DROP TABLE[schema.]table_name[CASCADE CONSTRAINTS];

删除表后,表上的索引、触发器、权限、完整性约束也同时被删除。如果删除的表涉及引用主键或唯一关键字的完

整性约束时,那么DROP TABLE语句就必须包含CASCADE CONSTRAINTS子串。

视图是一个或多个表中的数据的简化描述,用户可以将视图看成一个存储查询或一个虚拟表。删除视图使用

DROP VIEW命令,其语法格式为:

DROP VIEW view_name;

需要注意的是,将视图定义从数据字典中删除,基于视图的权限也同时被删除,其他涉及到该视图的函数、视图、

程序等都将被视为非法。

6.2.4 删除用户

当删除一个用户时,系统会将该用户账号以及用户模式的信息从数据字典中删除。用户被删除后,用户创建的所有

数据库对象也被全部删除。删除用户可以使用DROP USER语句。

如果用户当前正连接到数据库,则不能删除该用户,必须等到该用户退出系统后再删除。如果要删除的用户模式中

包含有模式对象,则必须在DROP USER 语句中带上CASCADE 关键字,那么就会在删除用户时也将该用户创建的模

式对象全部删除。

CONNECT sys/sysroot
DROP USER user2;

6.3 不同用户权限管理

Oracle数据库系统中的用户包括最终用户(即连接、登录和操作数据库的人员)、应用程序开发人员(使用Oracle

数据库进行应用程序开发的人员)、数据库管理员(DBA)等,其中最高的权限属于SYSDBA

SYSDBA具有控制Oracle一切行为的特权,如创建、启动、关闭、恢复数据库等。使数据库归档/非归档,备份表

空间等关键性的动作只能通过具有SYSDBA权限的用户来执行。这些任务即使是普通DBA角色也不行。

一般对SYSDBA的管理有操作系统认证密码文件认证两种方式。具体选择哪一种认证方式取决于:是在 Oracle

运行的机器上维护数据库,还是在一台机器上管理分布于不同机器上的所有的Oracle 数据库。若选择在本机维护

数据库,则选择操作系统认证;若有很多数据库想进行集中管理,则可以选择密码文件认证方式。

6.4 管理对数据库对象的访问

Oracle 实现对数据库对象的访问管理,包括使用用户口令、使用权限控制、使用存储过程控制、使用数据库链

接、使用配置文件等。

6.4.1 使用用户口令
CONNECT sys/sysroot as sysdba;
CREATE USER user1 IDENTIFIED BY teacher;;
connect user1/teacher;
6.4.2 使用权限控制

为了执行基本的数据库操作,应该给数据库管理员授予管理权限。这些管理权限是通过两个专用的系统权限来授予

的,即SYSDBASYSOPER 根据所需的授权级别,授予一个管理权限。Oracle 数据库也可以使用权限控制用户对

数据库的操作,保证数据库的安全性。包括使用系统权限和管理权限来进行控制。

6.4.3 使用数据库链接

数据库链接(Database Link)是在分布式环境下,为了访问远程数据库而创建的数据通信链路。数据库链接隐藏了

对远程数据库访问的复杂性。通常将正在登录的数据库称为本地数据库,另外一个数据库称为远程数据库。有了数

据库链接,便可以直接通过数据库链接来访问远程数据库的表。常见的形式是访问远程数据库固定用户的链接,即

链接到指定的用户,创建该形式的数据库链接的语法格式如下:

CREATE DATABASE LINK link_name CONNECT TO user IDENTIFIED BY password USING
'server_name';
  • link_name:表示要链接的远程数据库名。

  • userpassword:分别表示账户及对应的账户密码。

  • server name:远程数据库服务名。

创建数据库链接时,所要连接数据库的用户应具有CREATE DATABASE LINK系统权限。数据库链接一旦建立并测

试成功,就可以使用表名@数据库链接名的形式来访问远程用户的表。

6.4.4 使用配置文件

用户配置文件是Oracle安全策略的重要组成部分,利用用户配置文件可以对数据库用户进行基本的资源限制,并

且可以对用户的密码进行管理。

在安装数据库时,Oracle会自动建立名为DEFAULT的默认资源文件。如果没有为新创建的用户指定配置文件,

Oracle将会自动为它指定DEFAULT资源文件。另外,如果用户在自定义的资源文件中没有指定某项参数,Oracle

也会使用 DEFAULT 资源文件中相应参数设置作为默认值。

1、利用用户配置文件

利用用户配置文件,可以对系统资源进行限制,其具体介绍如表所示。

在这里插入图片描述

2、密码限制次数

用户配置文件除了可以用于资源管理外,还可以对用户的密码策略进行控制。使用配置文件可以实现账户的锁定、

密码的过期时间、密码的复杂度三种密码管理。

在资源配置文件中,对用户密码的限制参数如表所示。

在这里插入图片描述

3、管理用户配置文件

用户配置文件实际上是对用户使用的资源进行限制的参数集。一般来说,为了有效地节省系统硬件资源,在设置配

置文件中的限制参数时,通常会设置SESSION_PER_USERIDLE_TIME,以防止多个用户使用同一个用户账号连

接,并限制会话的空闲时间,而对于其他限制参数则不进行设置。

在这里插入图片描述

此外,还可以通过查询数据字典的DBA_PROFILES视图来查看配置文件信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值