1、概要文件和用户
一次只能向用户分配一个概要文件。
概要文件:
• 控制资源消耗量
• 管理帐户状态和口令失效
注:只有将RESOURCE_LIMIT设置为TRUE,概要文件才能强制执行资源限制。
概要文件是用于限制数据库用法和实例资源的一组已命名的资源限制条件。通过概要文件还可管理帐户状态并对用户的口令进行限制(长度、失效时间等)。每个用户都分配有一个概要文件,而且该用户在指定时间只属于一个概要文件。如果在更改用户概要文件时用户已经登录,则所做更改只在用户下一次登录时才生效。
DEFAULT概要文件用作其它所有概要文件的基础。
如上图所示,可隐式指定概要文件的限制,如在“CPU/Session(CPU/会话)”中,
可取消限制,如“CPU/Call(CPU/调用)”,
也可以引用DEFAULT概要文件中的任何设置,如“Connect Time(连接时间)”。
除非RESOURCE_LIMIT初始化参数设置为TRUE,否则不能通过概要文件强行设置用户的资源限制。
如果RESOURCE_LIMIT使用默认值FALSE,则忽略概要文件资源限制。总是强制实施概要文件口令设置。
管理员使用概要文件可控制以下系统资源:
• CPU:可按会话或调用限制CPU 资源。
将“CPU/Session(CPU/会话)”限制为1,000 表示,如果使用此概要文件的任一会话占用10 秒以上的CPU 时间(CPU 时间限制以百分之一秒为单位),该会话就会收到错误消息并被注销:
ORA-02392: exceeded session limit on CPU usage, you are being
logged off
每个调用限制的作用是相同的,但是它不是限制用户的整个会话,而是防止任一命令占用过多的CPU。
如果“CPU/Call(CPU/调用)”受到限制,并且用户超出了该限制,则命令会中止。
用户将收到如下所示的错误消息:
ORA-02393: exceeded call limit on CPU usage
• 网络/内存:每个数据库会话都会占用系统内存资源和网络资源(如果会话来自服务器的非本地用户)。可以指定以下参数:
- 连接时间:指示用户在自动注销前可以保持连接的分钟数。
- 闲置时间:指示用户会话在自动注销前可以保持闲置的分钟数。只会计算服务器进程的闲置时间。闲置时间中不考虑应用程序活动。IDLE_TIME限制不受长时间运
行查询和其它操作的影响。
- 并行会话:指示使用数据库用户帐户可以创建多少并行会话。
- 专用SGA:限制在系统全局区域(SGA) 中执行排序、合并位图等操作所占用的空间量。此限制仅在会话使用共享服务器时才有效。
• 磁盘I/O:限制用户在每个会话级或每个调用级可读取的数据量。
“读取/会话”和“读取/调用”可限制内存和磁盘的总读取次数。这样做可确保执行大量I/O 操作的语句不会过度使用内存和磁盘。
通过概要文件还可提供组合限制。组合限制以“CPU/会话”、“读取/会话”、“连接时间”和“专用SGA”的加权组合为基础。
要创建概要文件,请单击“Server(服务器)”选项卡,然后在“Security(安全)”标题下单击“Profiles(概要文件)”。在“Profiles(概要文件)”页中,单击“Create(创建)”按钮。
注:资源管理器可替代许多概要文件设置。
2、实施口令安全功能
Oracle 口令管理是通过使用用户概要文件来实现的。概要文件可提供许多标准安全功能。
注:不要使用会导致SYS、SYSMAN和DBSNMP口令失效以及相应帐户被锁定的概要文件。
查看default概要文件的配置。
sys@TEST0924> select * from dba_profiles where profile='DEFAULT';
PROFILE RESOURCE_NAME RESOURCE LIMIT
------------------------------ -------------------------------- -------- ----------------------------------------
DEFAULT COMPOSITE_LIMIT KERNEL UNLIMITED
DEFAULT SESSIONS_PER_USER KERNEL UNLIMITED
DEFAULT CPU_PER_SESSION KERNEL UNLIMITED
DEFAULT CPU_PER_CALL KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_SESSION KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_CALL KERNEL UNLIMITED
DEFAULT IDLE_TIME KERNEL UNLIMITED
DEFAULT CONNECT_TIME KERNEL UNLIMITED
DEFAULT PRIVATE_SGA KERNEL UNLIMITED
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 10
DEFAULT PASSWORD_LIFE_TIME PASSWORD 180
DEFAULT PASSWORD_REUSE_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED
DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD NULL
DEFAULT PASSWORD_LOCK_TIME PASSWORD 1
DEFAULT PASSWORD_GRACE_TIME PASSWORD 7
16 rows selected.
帐户锁定:如果用户在指定的次数内尝试登录系统失败,系统会在设置的持续时间内自动锁定帐户
• FAILED_LOGIN_ATTEMPTS:指定在锁定帐户前尝试登录的失败次数
• PASSWORD_LOCK_TIME:指定尝试登录失败达到了指定的次数后锁定帐户的天数
口令过期和失效:使用户口令具有生存期,口令在此生存期后会失效,必须对其进行更改。
• PASSWORD_LIFE_TIME:确定口令生存期(天),之后该口令就会失效
• PASSWORD_GRACE_TIME:指定首次成功登录到必须更改口令之间的宽限期(天),之后该口令就会失效。
注:锁定SYS、SYSMAN和DBSNMP帐户和使其口令失效,会妨碍Enterprise Manager 正常运行。应用程序必须捕获“口令失效”警告消息并处理口令更改;否则,宽限期一到期,就会锁定用户而不会通知原因。
口令历史记录:通过核对新口令可确保在指定的时间内或者在指定的口令更改次数内不重复使用口令。通过使用下列其中一项来进行核对:
• PASSWORD_REUSE_TIME:指定用户不能在指定天数内重复使用口令
• PASSWORD_REUSE_MAX:指定在可重复使用当前口令之前需达到的口令更改次数
注意:概要文件参数的值是在DEFAULT概要文件中设置的或从该概要文件中继承的。
如果两个口令历史记录参数都具有值UNLIMITED,则Oracle DB 将同时忽略两者。用户可以随时重用任何口令,但这不是一种有效的安全做法。
如果两个参数均已设置,则允许重用口令,但必须同时满足这两个条件:用户更改口令的次数必须达到指定次数,并且自最后一次使用旧口令以来已经过了指定的天数。
例如,假设用户ALFRED的概要文件中的PASSWORD_REUSE_MAX设置为10,PASSWORD_REUSE_TIME设置为30,则用户ALFRED只有在已重置了10 次口令,并且
自最后一次使用该口令以来已经过了30 天之后,才能重用该口令。
如果一个参数设置为某个数字,而另一个参数指定为UNLIMITED,则用户无法重用口令。
口令复杂性验证:通过对口令进行复杂性检查可验证口令是否符合特定的规则。这种检查一定要确保口令足够复杂,才能防止入侵者尝试通过猜测口令来闯入系统。
PASSWORD_VERIFY_FUNCTION参数指定一个PL/SQL 函数,该函数在分配口令之前执行口令复杂性检查。口令验证函数必须由SYS用户拥有,而且必须返回布尔值(TRUE或FALSE)。
位于以下目录中的utlpwdmg.sql脚本提供了模型口令验证函数:
• Unix 和Linux 平台:$ORACLE_HOME/rdbms/admin
• Windows 平台:%ORACLE_HOME%
dbmsadmin
3、创建口令概要文件
要创建口令概要文件,请单击“Server(服务器)”选项卡,然后在“Security(安全)”标题下单击“Profiles(概要文件)”。在“Profiles(概要文件)”页中,单击“Create(创建)”按钮。单击“Password(口令)”选项卡以设置口令限制。
可以从值列表中选择各个设置的常用值(单击手电筒图标可进行浏览),也可输入定制值。
所有时段都用“天”表示,但也可表示为分数。一天中有1,440 分钟,因此5/1,440 为5 分钟。
使用Enterprise Manager 也可编辑现有的口令概要文件。
使用sql创建profile如下:
sys@TEST0924> create profile grace_5 limit
2 FAILED_LOGIN_ATTEMPTS 3
3 PASSWORD_LOCK_TIME unlimited
4 PASSWORD_REUSE_TIME 30
5 PASSWORD_LIFE_TIME 30
6 PASSWORD_GRACE_TIME 5;
Profile created.
也可以使用alter profile修改:
sys@TEST0924> alter profile grace_5 limit
2 FAILED_LOGIN_ATTEMPTS 2
3 PASSWORD_LIFE_TIME 20
4 PASSWORD_GRACE_TIME 7
5 /
Profile altered.
如果utlpwdmg.sql脚本已运行,则VERIFY_FUNCTION和VERIFY_FUNCTION_11G函数将是可用的。如果创建了自己的复杂性函数,则可以输入该函数的名称。该函数名称不会显示在“Select(选择)”列表中。如果该函数生成运行时错误,用户将无法更改口令。
删除口令概要文件
在Enterprise Manager 中,无法删除用户使用的概要文件。但是,如果删除具有CASCADE选项的概要文件(例如在SQL*Plus 中),则会向具有该概要文件的所有用户自动分配DEFAULT概要文件。
4、提供的口令验证函数:VERIFY_FUNCTION_11G
Oracle 服务器提供两个名称分别为VERIFY_FUNCTION和VERIFY_FUNCTION_11g的口令复杂性验证函数。
这些函数是使用<oracle_home>/rdbms/admin/utlpwdmg.sql脚本创建的。
VERIFY_FUNCTION是为偏好以前版本提供的口令函数的用户提供的。必须在SYS方案中创建口令复杂性验证函数。此函数可用作自定义口令验证的模板。
除了创建VERIFY_FUNCTION以外,在utlpwdmg脚本中还使用以下ALTER PROFILE命令更改DEFAULT概要文件:
ALTER PROFILE default LIMIT
PASSWORD_LIFE_TIME 180
PASSWORD_GRACE_TIME 7
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED
FAILED_LOGIN_ATTEMPTS 10
PASSWORD_LOCK_TIME 1
PASSWORD_VERIFY_FUNCTION verify_function_11g;
注意,创建用户时,除非指定了其它概要文件,否则会向用户分配DEFAULT概要文件。
5、将限额分配给用户
“限额”是允许指定表空间具有的空间。默认情况下,任何表空间用户都没有限额。使用以下三个选项可为用户提供表空间限额。
• 无限制:允许用户最大限度地使用表空间中的可用空间。
• 值:用户可以使用的空间(以千字节或兆字节为单位)。这并不保证一定会为用户保留该空间。因为,此值可能大于或小于表空间中的当前可用空间。
• UNLIMITED TABLESPACE系统权限:覆盖所有单独的表空间限额,对于所有表空间(包括SYSTEM和SYSAUX),为用户提供无限制的限额。授予此权限时必须谨慎。
注意,授予RESOURCE角色时包括授予此权限。
对于SYSTEM或SYSAUX表空间,不得为用户提供限额。通常,只有SYS和SYSTEM用户才能在SYSTEM或SYSAUX表空间中创建对象。
对于分配的临时表空间或任何还原表空间,你不需要具有限额。
• 当用户创建或扩展段时,Oracle 实例会检查限额。
• 对于分配给用户方案的活动,只有那些使用表空间中的空间的活动才会计入限额。那些不使用所分配的表空间中的空间的活动(如创建视图或使用临时表空间)不会影响限额。
• 在使用PURGE子句删除了用户拥有的对象或者在回收站中自动清除了用户所拥有的对象时,会补充限额。
6、应用最少权限原则
• 保护数据字典:O7_DICTIONARY_ACCESSIBILITY=FALSE
• 撤销不必要的PUBLIC权限。
• 使用访问控制列表(ACL) 来控制网络访问。
• 限制用户可访问的目录。
• 限制具有管理权限的用户。
• 限制远程数据库验证:REMOTE_OS_AUTHENT=FALSE
应用最少权限原则意味着必须仅为用户授予高效地完成任务所需的权限。这会降低用户修改或查看(无意或恶意)他们无权修改或查看的数据的机率。
保护数据字典:默认情况下,O7_DICTIONARY_ACCESSIBILITY参数设置为FALSE。
如果没有很好的理由,一定不要更改这个设置,因为这会阻止具有ANY TABLE系统权限的用户访问数据字典的基表。这个参数设置还确保了SYS用户只能以SYSDBA身份登录。
撤销不必要的PUBLIC权限:有多个程序包对于需要这些程序包的应用程序非常有用,但需要正确的配置才能安全地使用这些程序包。
PUBLIC被授予了对以下程序包的执行权限:UTL_SMTP、UTL_TCP、UTL_HTTP和UTL_FILE。
在Oracle Database 11g中,网络访问由访问控制列表(ACL) 控制,ACL 可配置为允许某些用户访问特定的网络服务。
默认情况下,拒绝访问网络。要允许访问网络,必须创建ACL。可在两个级别控制通过UTL_FILE对文件的访问:
在操作系统级别使用文件和目录的权限,以及在数据库中通过DIRECTORY对象来允许访问特定文件系统目录。
可以向用户授予对DIRECTORY对象的读取权限或读写权限。应谨慎控制对其它PL/SQL 程序包的执行权限。
有一些功能较强大的程序包可能被误用,这些程序包包括:
• UTL_SMTP:允许将数据库用作简单邮件传输协议(SMTP) 邮件服务器来发送任意电子邮件。使用ACL 控制哪些用户可以访问哪些计算机。
• UTL_TCP:允许数据库服务器与任何正在接收或等待的网络服务建立外出网络连接。因此,在数据库服务器与任何正在等待的网络服务之间会发送任意数据。使用ACL 可控制访问权限。
• UTL_HTTP:允许数据库服务器通过HTTP 请求并检索数据。如果将这个程序包授予用户,可能会允许以HTML 形式将数据发送到恶意Web 站点。可使用ACL 限制访问权限。
• UTL_FILE:如果配置不当,则可能允许对主机操作系统上的任何文本文件进行访问。正确配置时,此程序包可限制用户只能访问特定目录位置。限制对操作系统目录的访问:通过数据库中的DIRECTORY对象,DBA 可以将目录映射到操作系统路径,从而将这些目录的权限授予各个用户。
限制具有管理权限的用户:不要为数据库用户提供不必要的权限。一定不能将DBA 角色授予非管理员。要实施最少权限,限制授予下列类型的权限:
• 授予系统和对象的权限
• 连接到数据库的SYS权限,如SYSDBA和SYSOPER
• 其它DBA 类型的权限,如DROP ANY TABLE
限制远程数据库验证:默认情况下,REMOTE_OS_AUTHENT参数设置为FALSE。一定不要更改这个设置,除非可确保所有客户机都能适当地验证用户。在引入了安全外部口令存储(在Oracle Database 10g发行版2 中提供)后,允许远程操作系统验证就有了令人信服的理由。
在远程验证过程中:
• 数据库用户通过外部方式来进行验证
• 远程系统验证用户
• 用户登录数据库,不必接受另外的验证
注:如果撤销了一些权限,务必全面测试应用程序。
7、保护授权帐户
授权帐户的保护方式有:
• 使用口令区分大小写的口令文件
• 对管理员角色启用严格的验证方法
设置数据库管理员验证
任何时候都必须对具有SYSDBA、SYSOPER或SYSASM权限的用户进行验证。在本地连接时,通过本地操作系统来验证用户是否为授权操作系统组的成员。如果是远程连接,则使用口令文件来验证授权用户。如果已配置口令文件,则首先检查此文件。在Oracle Database 11g中,这些口令是区分大小写的。Oracle Database 11g提供了一些其它方法,使远程管理员验证更加安全并可以集中管理这些授权用户。
使用Database Configuration Assistant 创建数据库时,口令文件是区分大小写的。如果从早期数据库版本进行升级,请确保用于远程连接的口令文件区分大小写:
orapwd file=orapworcl entries=5 ignorecase=N
如果担心口令文件可能会受到攻击或者维护许多口令文件会非常困难,则可以实施严格验证。如果要使用严格的验证方法,则需要高级安全选件。
相关视图:
DBA_USERS
DBA_PROFILES