oracle 12C管理用户帐户和安全

时间:2023-01-22 21:37:36

1、关于用户帐户

要让用户访问您的数据库,您必须创建用户帐户,并为这些帐户授予适当的数据库访问权限。用户帐户由用户名标识,并定义用户的属性,包括以下内容:

身份验证方法

数据库验证的密码

用于永久和临时数据存储的默认表空间

表空间配额

帐户状态(锁定或解锁)

密码状态(过期与否)

创建用户帐户时,不仅要为该帐户分配用户名,密码和默认表空间,还必须执行以下操作:

将相应的系统权限,对象权限和角色授予该帐户。

如果用户将要创建数据库对象,则在每个将创建对象的表空间上给用户帐户一个空间使用配额。


Oracle建议您授予每个用户足够的权限来执行他的工作,而不是更多。例如,数据库应用程序开发人员需要创建和修改表,索引,视图和存储过程的权限,但不需要(也不应该被授予)删除(删除)表空间或恢复数据库的权限。您可以创建用于数据库管理的用户帐户,并且只向这些帐户授予一部分管理权限。


另外,您可能需要创建仅由应用程序使用的用户帐户。也就是说,没有人用这些帐户登录; 相反,应用程序使用这些帐户连接到数据库,并且用户登录到应用程序。这种类型的用户帐户避免了给予应用程序用户直接登录到数据库的能力,在那里他们可能会无意中造成损害。有关更多信息,请参阅“ 关于用户权限和角色 ”。


当您创建用户帐户时,您也隐式地为该用户创建了一个模式。模式是用于该用户创建的数据库对象(如表,视图,触发器等等)的逻辑容器。模式名称与用户名称相同,可用于明确引用用户拥有的对象。例如,hr.employees是指hr模式中的命名employees的表。(该employees表归属hr。)数据库对象和模式对象名词可以互换使用。


删除用户时,必须同时删除该用户的所有模式对象,或者必须事先删除单独操作中的模式对象。


预定义的用户帐户


除了您创建的用户帐户之外,数据库还包括几个安装后自动创建的用户帐户。


所有数据库包括管理帐户SYS,SYSTEM和DBSNMP。管理帐户是具有高度权限的帐户,只有被授权执行管理任务的人员才需要,例如启动和停止数据库,管理数据库内存和存储,创建和管理数据库用户等等。使用SYS或SYSTEM登录到Oracle Enterprise Manager Database Express(EM Express)。使用Oracle数据库配置助手(DBCA)创建数据库时,请为这些帐户分配密码。您不能删除这些帐户。


所有数据库还包括内部帐户,这些帐户是自动创建的,因此单个Oracle数据库功能或组件(如Oracle Application Express)可以拥有自己的模式。为了保护这些帐户免受未经授权的访问,它们最初被锁定,并且其密码已过期。(锁定的帐户是禁用登录的帐户。)您不能删除内部帐户,也不能使用它们登录数据库。


如果在安装数据库时选择了在数据库中创建样本模式的选项,则数据库还可能包含样本模式。示例模式是一组相互链接的模式,使Oracle文档和Oracle教学材料能够说明常见的数据库任务。这些模式还为您提供了一种不危害生产数据的实验方法。


每个示例模式都有一个与之关联的用户帐户。例如,hr用户帐户拥有hr模式,其中包含一组用于人力资源应用程序的简单表。示例模式帐户也最初被锁定并具有过期的密码。作为数据库管理员,您负责解锁这些帐户并为这些帐户分配密码。


1.1 关于CDB中的通用性

在多租户容器数据库(CDB)中,通用性的基本原则是每个现有的和将来的容器都有一个共同的现象(phenomenon)。 在CDB,“通用”是指“所有容器共用”。 相反,局部现象仅限于一个现有的容器。共同原则的必然结果是,只有通用用户才能改变通用现象的存在。 更确切地说,只有连接到根的通用用户才能创建,销毁或修改通用用户或角色的CDB范围的属性。


1.1.1 CDB中的通用用户

一个通用的用户是一个数据库用户,它在根目录和每个现有和将来的可插拔数据库(PDB)中具有相同的标识。每个通用用户都可以连接并执行根目录中的任何操作,并且可以在任何拥有其权限的PDB中执行操作。

每个通用用户都是Oracle提供的或用户创建的。Oracle提供通用用户的例子是SYSSYSTEM

通用用户有以下特点:

  • 一个通用的用户可以登录到CDB$ROOT和它有CREATE SESSION权限的任何容器。

  • 通用用户不需要在每个容器中拥有相同的权限。例如,c##dba用户可能有权在根和一个PDB中创建会话,但不能在不同的PDB中创建会话。因为具有适当权限的通用用户可以在容器之间切换,所以根中的通用用户可以管理PDB。

  • 每个用户创建的通用用户的名称必须以字符c##C##开头。(Oracle提供的通用用户名不具有此限制。)

  • 没有本地用户名可能以字符c##C##开头。

  • 通用用户的名字只能包含ASCII或EBCDIC字符。

  • 每个通用用户都是唯一命名的所有容器。

  • 通用用户驻留在根中,但必须能够以相同的身份连接到每个PDB。

  • 通用用户的模式可以在每个容器中有所不同。

  • 例如,如果c##dba是拥有多个容器的通用用户,则c##dba每个容器中的模式可能包含不同的对象。

1.1.2 CDB中的本地用户

本地用户是不常见的用户,只能在单个可插拔数据库(PDB)内运行。本地用户有以下特点:

  • 本地用户特定于特定的PDB,并在此PDB中拥有模式。

  • 本地用户不能在根目录下创建。

  • 一个PDB上的本地用户无法登录到另一个PDB或根目录。

  • 本地用户的名称不能以字符c##C##

  • 本地用户的名称只能在其PDB中唯一。

  • 包含该用户模式的用户名和PDB确定唯一的本地用户。例如,名为rep的本地用户和模式可以存在于名为hrpdb的PDB上。完全独立的本地用户和模式命名rep可以存在于名为salespdb的PDB上。

  • 本地用户是否可以访问共同模式中的对象取决于他们的用户权限。

  • 例如,c##dba普通用户可以在hrpdbPDB 上的模式c##dba中创建一个表。除非c##dba将必要的权限授予此本地用户hr,否则hr无法访问它。

2、关于用户权限和角色

用户权限提供了基本的数据库安全级别。它们旨在控制用户对数据的访问,并限制用户可以执行的SQL语句种类。创建用户时,授予权限以使用户能够连接到数据库,运行查询和更新,创建模式对象等等。

用户权限的主要类型如下:

  • 系统权限 - 一个系统权限赋予用户执行特定动作或对特定类型的任何模式对象执行动作的能力。例如,系统权限CREATE TABLE允许用户在与该用户关联的模式中创建表,系统权限CREATE USER允许用户创建数据库用户。

  • 对象权限 - 一个对象权限赋予用户对特定模式对象执行特定操作的能力。不同的对象权限可用于不同类型的模式对象。从EMPLOYEES表中选择行或从表DEPARTMENTS中删除行的权限是对象权限的示例。

通过使用角色(它们被命名为相关权限组),管理权限变得更容易。您可以创建角色,将角色授予系统和对象权限,然后将角色授予用户。您还可以将角色授予其他角色。与模式对象不同,角色不包含在任何模式中。

下面列出了Oracle数据库中预定义的三个广泛使用的角色。您可以在创建用户时或之后的任何时间授予这些角色。

Oracle数据库预定义角色

角色名称

描述

CONNECT

使用户能够连接到数据库。将此角色授予任何需要数据库访问的用户或应用程序。

RESOURCE

使用户能够在与该用户关联的模式中创建,修改和删除特定类型的模式对象。仅将此角色授予开发人员和其他必须创建模式对象的用户。此角色授予创建对象系统权限的一个子集。例如,它授予CREATE TABLE系统权限,但不授予CREATE VIEW系统权限。它仅授予以下权限:CREATE CLUSTERCREATE INDEXTYPECREATE OPERATORCREATE PROCEDURECREATE SEQUENCECREATE TABLECREATE TRIGGERCREATE TYPE

DBA

使用户能够执行大多数管理功能,包括创建用户和授予权限; 创造和授予角色; 在任何模式中创建,修改和删除模式对象; 和更多。它授予所有系统权限,但不包括启动或关闭数据库实例的权限。这是默认授予用户SYSSYSTEM


2.1 关于CDB中的通用和本地角色

每个Oracle提供的角色都是常见的。 在Oracle提供的脚本中,Oracle提供的用户通常都被授予了相应的权限,但有一个例外:系统权限在本地授予通用角色PUBLIC。 用户创建的角色是本地或通用的。


2.1.1 CDB中的通用角色

常见的角色是存在于根目录中以及每个现有和将来的可插拔数据库(PDB)中的数据库角色。通用角色对于跨容器操作非常有用,确保通用用户在每个容器中都有角色。


每个通用角色都是用户创建的或甲骨文提供的。所有的Oracle提供的角色都是通用的,比如DBA和PUBLIC。用户创建的通用角色必须具有以C##或开头的名称C##,并且只能包含ASCII或EBCDIC字符。例如,多租户容器数据库(CDB)管理员可以创建普通用户c,然后为该用户共同授予DBA角色,以便c ## dba在任何现有和将来的PDB中具有DBA角色。


用户只能对通用角色执行常见操作,例如,在满足以下条件时通常授予角色的权限:

用户是当前容器为根的普通用户。

用户具有SET CONTAINER共同授予的权限,这意味着权限适用于所有容器。

用户具有控制执行指定操作的权限的权限,并且该权限已经被共享。


例如,要创建一个通用角色,普通用户必须拥有CREATE ROLE和SET CONTAINER权限。使用Oracle Enterprise Manager Database Express(EM Express)创建通用角色必须在根中创建。


2.1.2 PDB中的本地角色

本地角色只存在于单个可插拔数据库(PDB)中,就像非CDB中的角色只存在于非CDB中一样。 本地角色只能包含角色所在的容器内应用的角色和权限。


同一多租户容器数据库(CDB)中的PDB可能包含具有相同名称的本地角色。 例如,用户创建的角色pdbadmin可能存在于hrpdb和salespdb PDB中。 这些角色是完全独立的,就像在不同的非CDB中一样。


使用Oracle Enterprise Manager Database Express(EM Express)创建的本地角色必须在要使用的PDB中创建。

2.2 关于CDB中的权限和角色授权

就像在非CDB中一样,多租户容器数据库(CDB)中的用户可以授予角色和权限。CDB中的一个关键区别在于本地授予和通常授予的角色和权限之间的区别。在当地授予的权限或角色只能在被授予的容器内行使。通常授予的权限或角色可以在每个现有的和将来的容器中行使。

用户和角色可能是常见的或本地的。然而,权限本身既不通用,也不是本地权限。如果用户使用该CONTAINER=CURRENT条款在本地授予权限,则被授予者仅在当前容器中具有可行使的权限。如果用户使用该CONTAINER=ALL条款授予权限,则被授予者可以在任何现有的和未来的容器中具有权限。

注意:

当您使用Oracle企业管理器Database Express(EM Express)授予CDB中的权限或角色时,授予权限的容器将确定它是通常授予的还是本地授予的权限或角色。

例如,当您使用EM Express在根目录中授予权限时,授予者可以在任何现有和将来的容器中行使该权限。当您使用EM Express在可插拔数据库(PDB)中授予权限时,该权限是本地授予的权限,被授予者只能在该PDB中行使权限。


在CDB,每一个授予行为,不论是本地的还是通用的,都发生在一个特定的容器内。授予的基本原则如下:

通用的和本地的现象都可以在本地授予和授予。

只有通用的现象可以授予或被通用授予。

本地用户,角色和权限在定义上仅限于特定的容器。因此,本地用户可能不会共同授予角色和权限,本地角色和权限可能不会被共享。


2.2.1 CDB中通常授予的权限和角色

权限和通用角色可能会被授予。 根据可插入数据库(PDB)授予的原则,只有授予者和授予者都是通用的,用户或角色才可以被授予角色和特权。 如果一个角色被授予通用的角色,那么角色本身必须是通用的。

 

2.2.2 CDB中本地授予的权限和角色

角色和权限可以在本地授予用户和角色,无论授予者,授予者或被授予的角色是本地的还是通用的。

 

3、关于管理帐户和权限


管理帐户和权限使您可以执行管理用户,管理数据库内存以及启动和关闭数据库等管理功能。

本节包含以下主题:
SYS和SYSTEM用户
SYSDBA和SYSOPER系统特权

3.1 SYS和SYSTEM用户

安装Oracle数据库时将自动创建以下管理用户帐户。它们都是使用您在安装时提供的密码创建的,并且都会自动授予DBA角色。

  • SYS

  • 该帐户可以执行所有管理功能。数据库数据字典的所有基础表和视图都存储在SYS模式中。这些基表和视图对于Oracle数据库的运行至关重要。为了维护数据字典的完整性,SYS模式中的表只能由数据库操纵。他们不应该由任何用户或数据库管理员修改。您不要在SYS模式中创建任何表。

  • SYS用户被授予SYSDBA特权,这使得该用户可以执行诸如备份和恢复这种高级别管理任务。

  • SYSTEM

  • 此帐户可以执行除下列以外的所有管理功能:

    • 备份和恢复

    • 数据库升级

  • 尽管此帐户可用于执行日常管理任务,但Oracle强烈建议创建用于管理Oracle数据库的命名用户帐户,以启用对数据库活动的监视。

注意:

SYSBACKUP是另一个自动创建的帐户,用于执行备份和恢复。有关更多信息,请参阅“ 配置用户执行备份和恢复 ”。

3.2 SYSDBA和SYSOPER系统权限

SYSDBA并且SYSOPER具有执行高级管理操作(如创建,启动,关闭,备份或恢复数据库)所需的管理权限。该SYSDBA系统权限是充分授权数据库管理员和SYSOPER系统权限允许用户执行基本操作任务,但是没有看用户数据的能力。

SYSDBASYSOPER系统权限允许访问一个数据库实例,即使数据库未打开。这些权限的控制因此完全在数据库本身之外。通过此控件,被授予这些权限之一的管理员可以连接到数据库实例以启动数据库。

您也可以将连接的类型SYSDBASYSOPER特权想象为使您能够执行某些数据库操作的连接类型,而这些操作不能以其他方式授予特权。例如,如果您有SYSDBA权限,则可以使用AS SYSDBA连接到数据库。

SYS用户安装时被自动授予SYSDBA的特权。以SYS用户身份登录时,必须以SYSDBA或者SYSOPER连接到数据库。以SYSDBA用户身份连接调用SYSDBA权限; 连接SYSOPER调用SYSOPER特权。EM Express允许您以用户身份登录SYS并以 SYSDBASYSOPER连接。

使用SYSDBASYSOPER权限进行连接时,将使用默认模式进行连接,而不是与通常与用户名关联的模式进行连接。对于SYSDBA这个模式是SYS; 为SYSOPER架构是PUBLIC

注意:

以用户身份连接时SYS,您可以在数据字典表上拥有无限的权限。确定你不修改任何数据字典 表。

4、设置数据库密码策略

本节提供有关为数据库中的所有用户帐户设置密码策略的背景信息和说明。

4.1 关于密码策略

当您创建用户帐户时,将为该用户帐户分配默认的密码策略。新安装的数据库的默认密码策略包含以下指令:

用户帐户的密码将在180天后自动失效。

用户帐户在密码过期7天后被锁定。

10次​​失败登录尝试后,用户帐户被锁定1天。

默认密码策略通过称为配置文件的数据库对象分配给用户帐户。每个用户帐户都分配一个配置文件,并且该配置文件具有多个描述密码策略的属性。该数据库附带一个默认配置文件(named DEFAULT),除非您在创建用户帐户时另行指定,否则将默认配置文件分配给该用户帐户。

为了获得更好的数据库安全性,您可能需要施加更严格的密码策略。例如,您可能希望密码每70天过期一次,并且在三次失败登录尝试后,您可能需要锁定用户帐户。(当用户为该帐户输入不正确的密码时,会发生用户帐户登录尝试失败。)您也可能希望要求密码足够复杂,以便为通过猜测密码尝试进入系统的入侵者提供合理的保护。例如,您可以指定密码必须至少包含一个数字和一个标点符号。

您可以通过修改DEFAULT配置文件的密码相关属性来更改数据库中每个用户帐户的密码策略。

注意:
不同的用户帐户可能有不同的密码策略。您可以通过创建多个配置文件,为每个配置文件设置不同的密码相关属性,并将不同的配置文件分配给不同的用户帐户来实现此目的 本节未讨论这种情况。