管理用户安全性
第1 章数据库用户管理
【学习目标】
Oracle 数据库用户是数据库安全机制的一种,通过它可管理数据库对象的所有权和访问
权限。本章主要内容是介绍Oracle 数据库用户、模式(Schema)的概念,数据库用户的身
份验证机制,以及如何创建和管理数据库用户。
【本章要点】
• 了解ORACLE 验证方式
• 使用概要文件
• 创建、修改和删除数据库用户
• 获取数据库用户信息
【关键术语】
Schema (模式、用户、方案、纲要) Quota 配额
Database authentication 数据库验证Operating system authentication 操作系统验证
Profiles 概要文件Password limits 口令限制
Resource limits 资源限制Default profile 默认概要文件
Password expiration 口令失效Password verification 口令验证
Password grace time 口令失效宽限时间
1.1 用户与安全
1.1.1 数据的安全访问
Oracle 数据库的安全包括在对象级控制数据库访问和使用的机制,这是通过数据库用户
来实现的,数据库用户是定义在数据库中的一个名称,它是存取数据库中信息的通道,是
Oracle 数据库的基本访问控制机制。
要访问数据库,用户必须指定有效的数据库用户帐户,而且还要根据该用户帐户的要求
成功通过验证。每一个数据库用户都有自己的数据库帐户。这是Oracle 的最佳实践建议,
这样可避免存在潜在的安全漏洞,为特定的审计活动提供有意义的数据。但是,在极少数情
况下,若干用户会共享一个公用数据库帐户。此时,操作系统和应用程序必须为数据库提供足够的安全性。
数据安全策略决定哪个用户访问特定模式对象,在对象上允许每个用户的特定类型操
作。用户在访问Oracle 数据库时必须提供一个数据库帐户,只有合法身份的用户才能够访
问数据库。
在Oracle 数据库中,每个数据库用户有一系列安全属性,见图13-1。
各个属性的含义如下:
• 唯一的用户名:用户名不能超过30个字节,不能包含特殊字符,而且必须以字母开
头。
• 验证方法:最常见的验证方法是口令,但是Oracle Database 10g 支持其它多种验
证方法,包括生物统计学验证、证书验证和标记验证。
• 默认表空间:如果用户未指定其它表空间,则可在这个表空间中创建对象。请注意,
具有默认表空间并不意味着用户具有在该表空间创建对象的权限,也不意味着用户
具有该表空间(用于创建对象)中的空间限额。这两项需要另外单独授权。
• 临时表空间:用户可在其中创建临时对象(如排序和临时表)的表空间。
• 用户概要文件:分配给用户的一组资源与口令的限制。
• 使用者组:由资源管理器使用。
• 锁定状态:用户只可访问“未锁定”帐户。
• 表空间配额:指明用户在某个表空间中所能使用的存储空间大小。
1.1.2 预定义账户SYS和SYSTEM
● SYS 帐户:
– 授予了DBA 角色
– 具有ADMIN OPTION 的所有权限
– 执行启动、关闭和某些维护命令时需要使用的帐户
– 拥有数据字典
– 拥有自动工作量资料档案库(AWR)
– 使用AS SYSDBA子句连接(任何授予了SYSDBA 权限的用户均可通过使用
AS SYSDBA 子句连接到SYS 帐户)
● SYSTEM 帐户授予了DBA 角色(非SYSDBA)。
● 这两个帐户不在例行程序操作中使用。
● 只有授予了SYSDBA 或SYSOPER权限的“授权”用户才可以启动或关闭数据库实
例。
● SYS和 SYSTEM 帐户是数据库中必需存在的帐户,不能将其删除。
最佳实践提示:如果应用最少权限原则,则不在例行程序操作中使用这些帐户。需要DBA 权
限的用户另外拥有授予了所需权限的独立帐户。例如,Jim 有一个名为jim 的低权限帐户及
一个名为jim_dba 的授权帐户。使用此方法可应用最少权限原则,不需要共享帐户,而且可
审计各项操作。
1.1.3 验证用户
验证指的是对要使用数据、资源或应用程序的用户、设备或其它实体的身份进行验证。
通过对该身份进行验证可建立一种信任关系,从而可进一步执行交互。通过验证可将访问和
操作与特定的身份联系起来,从而实现可靠性。完成验证后,验证流程可允许或限制该实
体许可的访问和操作的级别。
创建用户时,必须确定要使用的验证方法,以后可修改此方法。
1.1.3.1外部验证
又称操作系统验证。用户可以在不指定用户名或口令的情况下连接到Oracle 数据库。
使用外部验证时,数据库依赖于基础操作系统或网络验证服务来限制对数据库帐户的访问。
数据库口令不会用于此类登录。如果操作系统或网络服务允许的话,可以使用外部验证来验
证用户。如果要执行此操作,请设置 OS_AUTHENT_PREFIX 初始化参数,并在 Oracle 用户名中使用此前缀。OS_AUTHENT_PREFIX 参数定义了一个前缀,Oracle 数据库会在每
个用户的操作系统帐户名之前添加此前缀。为了实现与Oracle 软件早期版本的向后兼容,
此参数的默认值为 OPS$。用户尝试建立连接时,Oracle 数据库会将带前缀的用户名与数据
库中的Oracle 用户名进行比较。
例如,假定OS_AUTHENT_PREFIX 设置如下:
OS_AUTHENT_PREFIX=OPS$
如果某个用户的操作系统帐户名为tsmith,它需要连接到Oracle 数据库而且已由操作
系统验证,那么Oracle 数据库会检查是否存在一个对应的数据库用户OPS$tsmith,如果存
在这样的用户,则允许该用户建立连接。在用户(已由操作系统验证)的所有引用中必须包
含OPS$tsmith 中显示的前缀。
注:在某些操作系统中,OS_AUTHENT_PREFIX 初始化参数的文本是区分大小写的。
1 SQL> show parameter os_authent_prefix 2 NAME TYPE VALUE 3 ------------------------------------ ----------- ------------------------------ 4 os_authent_prefix string ops$ 5 或者: 6 SQL> select value from v$parameter where name='os_authent_prefix'; 7 VALUE 8 -------------------------------------------------------------------------------- 9 ops$
创建外部操作系统身份验证的用户很简单,假如有一个操作系统用户名为dragon,则:
对于LINUX 系统: create user ops$dragon identified externally;
对于WINDOWS 系统,假如登陆ID 是Dragon,域名是MIS: create user "OPS$MIS\DRAGON" identified externally;
创建好用户后,以dragon 身份登录到操作系统,然后在直接输入:sqlplus / 进行登录 并连接到数据库。
外部验证的优点:
● 经过操作系统的身份验证后,用户可以更便捷地连接到Oracle,而无需提供用户
名及密码。例如,经过操作系统验证的用户,按以下方式调用SQL*Plus,即可跳
过输入用户名及密码的步骤:SQLPLUS /
● 在操作系统中集中地进行用户身份验证, Oracle 不必再存储及管理用户密码,但
Oracle 仍旧需要在数据库中维护用户名。
● 在数据库及操作系统中记录审计跟踪数据(audit trail)时可以使用相同的用户名。
1.1.3.2口令验证
又称为Oracle 数据库验证。
创建的每一个用户都有一个关联口令,用户尝试建立连接时,必须提供这个口令。设置
口令时,可以使该口令立即失效,这会强制用户在首次登录后更改口令。如果决定要使用户
口令失效,请确保用户能够更改口令。有些应用程序不具备此功能。
在(客户机/服务器之间和服务器/服务器之间)建立网络连接期间,系统总是先通过使
用修改过的数据加密标准(DES) 算法,以自动透明方式对口令加密,然后通过网络发送这
些口令
在使用SQL*Plus 时,通过口令身份验证进行连接的语法如下: CONNECT username / password [ @db_alias ]
● SQL> connect scott/tiger;
● SQL> conn scott/tiger;
● [oracle@oracle ~]$ sqlplus scott/tiger;
这是Oracle 一般用户使用得最多的一种身份验证方式。在使用口令身份验证进行连接
时,实例将针对在数据字典中的用户账户存储的口令。验证给定的口令。为此,数据库必须
处于打开状态;从逻辑上讲,在使用口令身份验证连接时,不可能发出STARTUP 命令或
者SHUTDOWN 命令。不允许SYS 用户以口令身份验证的方式进行连接,SYS 只能使用
口令文件、操作系统或LDAP 身份验证。
数据库验证表示用户名和口令的验证由Oracle 完成,用户在连接数据库时必须同时提
供用户名和口令。采用数据库验证具有以下一些优点:
● 用户帐户及其身份验证信息全部存储在数据库中,验证由Oracle Server 完成,而不
需要借助数据库外的任何控制。
● 当使用数据库验证时,Oracle 提供了严格的口令管理特征以加强口令的安全性,例
如帐户锁定、口令有效期以及口令长度、复杂度等。
● 易于管理。
1.1.3.3全局验证
使用Oracle Advanced Security 选项时,可通过全局验证(一种严格的验证方法)并使用生物统计学、x509 证书、标记设备和Oracle Internet Directory 来识别用户。
1.1.3.4网络验证
● 基于第三方的身份验证技术
如果系统中存在(DCE,Kerberos,或SESAME 等)的网络身份验证服务(network
authentication service),Oracle 可以使用这些网络服务进行身份验证。在使用网络身份验证
服务时,应注意其对网络角色(network role)及数据库链接(database link)的影响。
● 基于PKI 的身份验证
基于公共密钥加密(public key cryptography)的身份验证系统能够为用户客户端生成数
字证书(digital certificate),客户端使用此证书在业务服务器上进行身份验证,而不是直接
和身份验证服务器交互(authentication server)。Oracle 提供了支持公共密钥(public key)
及数字证书的公共密钥基础结构(public key infrastructure,PKI),其中包含以下组件:
− 基于SSL(Secure Sockets Layer(安全套接字层))的身份验证及安全会话密钥(secure
session key)管理。
− Oracle Call Interface 函数及PL/SQL 函数,用于使用私有密钥(private key)及证书来
保护用户指定的数据,或用可信证书(trusted certificate)验证数据上的签名(signature)。
− 可信证书,用于验证第三方实体的身份,确认其是否为可信的用户证书签署者。
− Oracle wallet,用于储存用户私有密钥,用户证书,及用户信任点(trust point)(即可信
的认证机构)集的数据结构。
− Oracle Wallet Manager,用于管理及编辑Oracle wallet 安全身份证明(security
credentials)的单机Java 应用程序。
− 由Oracle 之外的认证机构签署并发布的X.509v3 证书。
− Oracle Internet Directory,用于管理用户的权限及安全属性,包括通过X.509 证书进行用户身份验证。OID 能够确保属性级(attribute-level)的访问控制,并使读,写,及更
新等权限可以控制到具体的用户,例如管理员。
− Oracle Enterprise Security Manager,实现集中化的权限管理,从而简化管理员的工作,
并提升系统的安全级别。用户可以通过此组件在Oracle Internet Directory 中存储或提
取角色信息。
− Oracle Enterprise Login Assistant 是一个基于Java 的工具,用于打开或关闭用户的
wallet,从而控制应用程序是否采用基于SSL 的安全通讯。
● 远程身份验证
Oracle 能够利用远程拨号用户服务(Remote Dial-In User Service,RADIUS)支持远程用
户身份验证。RADIUS 是一个标准的轻量级协议,主要用于用户身份验证,授权,及审计
(accounting)。
1.1.4 管理员验证
数据库管理员能够执行普通数据库用户不该执行的特殊操作(例如启动或关闭数据库)。
Oracle 为数据库管理员用户提供更为安全的身份验证方式。
1.1.4.1操作系统安全性
在UNIX 和Linux 中,默认情况下,DBA 属于install 操作系统组。该组具有创建和
删除数据库文件所需的权限。
● DBA 必须具有创建或删除文件的操作系统权限。
● 普通数据库用户不应具有创建或删除数据库文件的操作系统权限。
1.1.4.2管理员安全性
只在使用口令文件或操作系统特权与权限完成验证后,才授权建立SYSDBA 和
SYSOPER 连接。如果使用操作系统验证,那么数据库就不使用提供的用户名和口令。当口
令文件不存在,或者该文件中不存在提供的用户名和口令,或者未提供用户名和口令时,就
使用操作系统验证。
但是,如果使用口令文件成功完成了验证,则使用用户名记录连接。如果使用操作系统
成功完成了验证,则表示这是一个CONNECT/连接,这种连接不记录具体用户。
注:操作系统验证优先于口令文件验证。特别是,如果您是操作系统中OSDBA 或
OSOPER 组的成员,而且以SYSDBA 或SYSOPER 身份进行连接,则会使用关联的管理
权限为您建立连接,不管您指定的用户名和口令是什么。
● 通过口令文件或操作系统验证SYSDBA 和SYSOPER 连接。
– 口令文件验证会按名称记录DBA 用户。
– 操作系统验证并不记录具体用户。
– 对于SYSDBA 和SYSOPER,操作系统验证优先于口令文件验证。
要为账户启用操作系统和口令身份验证(二者是相配的),必须为用户授予SYSDBA 或者
SYSOPER 权限:
GRANT [ sysdba | sysoper ] TO username ;
如果向用户授予这些权限之一或者所有权限,则会将用户口令从数据字典复制到外部口令文件中,此时,即使数据库未处于打开状态,实例也可以读取口令。
要使用口令文件身份验证,用户可以在使用SQL*Plus 时通过以下语法连接:
CONNECT username / password[ @db_alias] AS [ SYSOPER | SYSDBA ] ;
注意,可使用口令文件身份验证,通过Oracle Net 连接到远程数据库。
要使用操作系统身份验证,用户必须被确认为有权限访问Oracle 二进制文件的操作
系统用户之后,且在使用SQL*Plus 时通过以下语法连接之前首先登陆到数据库服务器:
CONNECT / AS [ SYSOPER | SYSDBA ] ;
与SYSDBA 和SYSOPER 以同一种方式运行的第三种权限是SYSASM,此权限仅适
用于ASM 实例。
Oracle 数据库在密码文件(password file)中记录被授予了SYSDBA 及SYSOPER 权
限的数据库用户,这些权限能够执行以下操作:
具备SYSOPER 权限的数据库管理员能够执行STARTUP,SHUTDOWN,ALTER
DATABASE OPEN/MOUNT,ALTER DATABASE BACKUP,ARCHIVE LOG,及RECOVER
命令,并具备RESTRICTED SESSION 权限。
具备SYSDBA 权限的数据库管理员拥有所有系统权限(system privilege)及权限的
ADMIN OPTION 选项,还拥有SYSOPER 所拥有的全部系统权限。此外,能够执行
CREATE DATABASE 命令,并能够执行基于时间的恢复操作(time-based recovery)。
1.1.5 身份验证的几个相关参数和配置
● remote_login_passwordfile
查看是否允许远程登录使用口令文件进行身份验证
SHARED 一个或多个数据库可以使用口令文件。可以包含SYS 或者非SYS 的口令文件。
EXCLUSIVE 新版本和SHARED 功能一致。
NONE 不允许远程使用口令文件验证,如远程用SYS 账号连接Oracle 将会报错。
1 SQL> show parameter remote_login_passwordfile NAME TYPE VALUE 2 ------------------------------------ ----------- -------------------- 3 remote_login_passwordfile string EXCLUSIVE 4 SQL> alter system set remote_login_passwordfile='NONE' scope=spfile 5 SQL> startup force 6 --进行远程连接,报错,实际是参数值被更改: 7 SQL> conn sys / oracle@orcl as sysdba 8 ERROR: 9 ORA-01017: invalid username/password; logon denied
● 查看使用口令文件进行身份验证的用户列表:
1 SQL> select * from v$pwfile_users; 2 USERNAME SYSDB SYSOP 3 ------------------------------ ----- ----- 4 SYS TRUE TRUE
● SQLNET.AUTHENTICATION_SERVICES
$ORACLE_HOME/network/admin/sqlnet.ora 配置文件中
SQLNET.AUTHENTICATION_SERVICES 参数,有三个取值:
NONE:作用是不允许通过OS 系统用户登录数据库,需要提供用户名及密码;
ALL:作用是允许所有的登录方式;
NTS:作用是允许本地操作系统用户认证;
1.1.6 数据库模式对象
Schema 模式是一系列对象的集合。一个模式只能够被一个数据库用户所拥有,并且模
式的名称与这个用户的名称相同。ORACLE 数据库中的每个用户都拥有一个唯一的模式,
他所创建的所有模式对象都保存在自己的模式中。模式对象的类型有表、索引、簇、触发器、
PL/SQL、序列、同义词、视图、存储过程和存储函数等,当然,Oracle 中并不是所有的对
象都是模式对象,非模式对象有:
• 表空间
• 用户
• 角色
• 回滚段
• 概要文件
当用户在数据库中创建一个模式对象后,这个模式对象默认地属于这个用户的模式。一
个用户可以访问其模式的所有对象,但其它用户要访问另一个模式的对象时,必须在对象名
前加上它所属的模式名。例如用户SCOTT 检索其模式的表EMP 时,可以直接执行语句:
SELECT * FROM EMP;
但是,如果要访问SMITH 模式的CLASS 表时,则必须执行语句:
SELECT * FROM SMITH.CLASS。
初学者在刚刚接触模式概念时,常常不清楚数据库用户与模式之间的区别。造成这种情
况的原因是因为在Oracle 数据库中,模式与数据库用户是一一对应,每个数据库用户都拥
有一个与他的用户名相同的模式。因此,在Oracle 数据库中,模式与用户两个概念的差别
很小,经常可以替换。例如“用户A 拥有TEMP 表”和“模式A 拥有TEMP 表”两句话的意义是相同的。因此不必在语言上完全区分模式与用户,但是,一定要清楚模式与用户是两个完
全不同的概念。
1.1.7 概要文件
1.1.7.1概要文件管理
1.1.7.1.1 概要文件的作用
概要文件是口令限制和资源限制的命名集合,是Oracle 安全策略的重要组成部分,利 用概要文件可以对数据库用户进行口令管理和资源限制。例如使用概要文可以指定口令有效 期、口令校验函数、用户连接时间以及最大空闲时间等。概要文件具有以下一些作用:
• 限制用户执行消耗资源过度的SQL 操作。
• 自动断开空闲会话。
• 在大而复杂的多用户数据库系统中合理分配资源。
• 控制用户口令的使用。
在建立数据库时,Oracle 会自动建立名称为DEFAULT 的默认概要文件,初始的 DEFAULT 概要文件的所有口令及资源限制选项值均为UNLIMITED,即未进行任何口令及 资源限制。当建立用户时,如果不指定概要文件,则Oracle 会将DEFAULT 概要文件分配给 该用户。根据用户所承担任务的不同,DBA 应该建立不同的概要文件,并将概要文件分配 给相应用户。一个用户只能分配一个概要文件,一个概要文件可以同时包含口令限制和资源 限制。1.1.7.1.2 概要文件内容
概要文件内容包括口令和资源的限制,下面分别介绍这两部分的有关参数。
1) 口令策略参数
口令策略参数可以实现帐户锁定、口令的过期以及口令的复杂度等策略,在概要文件中 的口令参数可以有以下几个:
• FAILED_LOGIN_ATTEMPTS:该参数指定允许的输入错误口令的次数,超过该次 数后用户帐户被自动锁定。
• PASSWORD_LOCK_TIME:用于指定指定账户被锁定的天数(单位:天)。
• PASSWORD_LIFE_TIME:指定口令的有效期(单位:天)。如果在达到有效期前用 户还没有更换口令,它的口令将失效,这时必须由DBA 为它重新设置新的口令。
• PASSWORD_GRACE_TIME:用于指定口令失效的宽限期(单位:天)。• PASSWORD_REUSE_TIME:指定能够重复使用一个口令前必须经过的时间(单位: 天)。
• PASSWORD_REUSE_MAX:用于指定在重复使用口令之前必须对口令进行修改的 次数。PASSWORD_REUSE_TIME 和PASSWORD_REUSE_MAX 两个参数只能设 置一个,另一个必须为UNLIMITED。
• PASSWORD_VERIFY_FUNCTION:指定验证口令复杂度的函数。Oracle 提供了一 个默认的口令校验函数,这可以通过运行脚本utlpwdmg.sql 来建立该函数,脚本保 存在RACLE_HOME\rdbms\admin 目录中。DBA 也可以通过修改脚本来实现自己 的口令校验函数。
2) 资源限制参数
利用概要文件,可以对以下系统资源进行限制。
• CPU 时间
• 逻辑读
• 用户的并发会话数
• 空闲时间
• 连接时间
• 私有SGA 区
对这些资源的限制是通过在概要文件中设置参数来实现的,参数的值可以是一个整数, 也可以是UNLIMITED(即不受限制),还可以是DEFAULT(使用DEFAULT 概要文件中的 参数设置)。下面分别介绍有关参数:
• CPU_PER_SESSION:限制每个会话所能使用的CPU 时间。参数值是一个整数, 单位是百分之一秒。
• SESSIONS_PER_USER:限制每个用户所允许建立的最大并发会话数。
• CONNECT_TIME:限制每个会话能连接到数据库的最长时间,超过这个时间会话 将自动断开。参数值是一个整数,单位是分钟。
• IDLE_TIME:限制每个会话所允许的最长连续空闲时间,超过这个时间会话将自 动断开。参数值是一个整数,单位是分钟。
• LOGICAL_READS_PER _SESSION:限制每个会话所能读取的数据块数目。
• PRIVATE_SGA:每个会话分配的私有SGA 区大小(以字节为单位)。该参数只对 共享服务器模式有效。• CPU_PER_CALL:用于指定每条SQL 语句可占用的最大CPU 时间,单位是百分 之一秒。
• LOGICAL_READS_PER_CALL:用于指定每条SQL 语句最多所能读取的数据块数 目。
1.1.7.2使用概要文件管理口令
Oracle 数据库中不同用户账户具有不同的口令,如何防止其他人窃取账户密码是DBA
要重点关切的问题。为了加强用户账户的安全性,Oracle 提供了概要文件来管理口令,概要
文件管理口令有锁定账户、终止口令、口令历史以及口令校验等四种安全保护方式。大家需
要注意,前面介绍的概要文件中共包含了7 个口令管理选项,如果仅指定某个或某几个选项,
那么其他选项将自动使用DEFAULT 概要文件的相应选项值。
使用概要文件管理口令主要步骤是先创建概要文件,然后设置相关口令参数,最后把概
要文件分配给用户。建立概要文件是使用CREATE PROFILE 命令来完成的,一般情况下建
立概要文件是由DBA 来完成的,如果要以其他用户身份建立概要文件,则要求该用户必须
具有CREATE PROFILE 系统权限。
1.1.7.2.1 锁定帐户
如果用户在指定的次数内尝试登录系统失败,系统会在设置的持续时间内锁定帐户。
• FAILED_LOGIN_ATTEMPTS 参数指定在锁定帐户前尝试登录失败的次数。
• PASSWORD_LOCK_TIME 参数指定在经历指定的尝试登录失败次数后锁定 帐户的天数。
如果建立PROFILE 时没有提供PASSWORD_LOCK_TIME 选项,将自动使用默认 值(UNLIMITED),在这种情况下,需要DBA 手工解锁通过使用概要文件,可以限制登录失败 次数,如果连续登录的失败次数超出一定范围,那么Oracle 会自动锁定账户。1 --【实例16-1】为了加强devp 用户的口令安全,要限制其登录失败次数为3。 2 --1)以管理员身份登录 3 SQL>CONNECT / AS SYSDBA 4 已连接。 5 --2)创建概要文件,设定相关参数 6 SQL>CREATE PROFILE devp_lock LIMIT FAILED_LOGIN_ATTEMPTS 3; 7 --配置文件已创建 8 --3) 分配概要文件给用户devp,这既可以在建立用户时使用PROFILE 子句,也可以在 建立用户之后使用ALTER USER 语句修改。 9 10 SQL>ALTER USER devp PROFILE devp_lock; 11 用户已更改。 12当将概要文件分配给devp 用户之后,如果以devp 连接到数据库时,连续登录失败 次数达到三次,那么系统会自动锁定该用户账户。此时,即使为用户devp 提供了正确的口 令,也将无法连接到数据库,并显示错误信息。例如:
1.1.7.2.2 终止口令
使用户口令具有生存期,口令在此生存期之后会失效,而且可能已更改。
• PASSWORD_LIFE_TIME 参数指定口令的生存期(以天为单位),此时间之后, 口令会失效。
• PASSWORD_GRACE_TIME 参数指定口令失效后首次成功登录时用于更改 口令的宽限期(以天为单位)。
注:通过使口令失效和锁定SYS、SYSMAN 和DBSNMP 帐户,可避免出现Enterprise Manager 不正常运行的情况。应用程序必须捕获“口令到期”警告消息并处理口令更 改;否则,宽限期一到期,会在原因不明的情况下锁定用户。
1 --【实例16-2】强制用户devp 每隔10 天修改其自身口令,并设置两天宽限期。 2 --1)以管理员身份登录 3 SQL>CONNECT / AS SYSDBA 4 已连接。 5 --2)创建概要文件,设定相关参数 6 SQL>CREATE PROFILE devp_life LIMIT PASSWORD_LIFE_TIME 10 PASSWORD_GRACE_TIME 2; 7 配置文件已创建 8 --3) 分配概要文件给用户devp 9 SQL>ALTER USER devp PROFILE devp_life; 10 用户已更改。 11 --当将概要文件分配给用户devp 之后,第10 天登录会显示警告信息: 12 SQL>connect devp/development 13 ERROR: 14 ORA_28002:the password will expire within 2 days 15 已连接。 16 -- 如果第10 天未改变口令,那么第11 天登录时仍然会显示类似警告信息。但用户如果第11 天仍然未改变口令,那么第12 天登录时系统会强制你改变口令,并显示如下信息: 17 SQL>connect devp/development 18 19 ERROR: 20 ORA-28001: the password has expired 21 更改devp 的口令 22 新口令: 23 重新键入新口令: 24 口令已更改 25 已连接。 261.1.7.2.3 口令历史
通过核对新口令可确保在指定的时间内或者在指定的口令更改次数内不重复使用口令。 通过使用下列其中一项来进行核对:
• PASSWORD_REUSE_TIME:用于指定口令可重用时间
• PASSWORD_REUSE_MAX:用于指定在重用口令之前口令需要改变的次数
注意: 这两个参数是互相排斥的, 因此, 如果其中一个参数的设置值不是 UNLIMITED(如果DEFAULT 概要文件的设置值为UNLIMITED,则为DEFAULT), 则另一个参数必须设置为UNLIMITED。 假定devp 原有口令为development,终止口令时新口令仍然可以设置为development, 这种做法显然失去了终止口令的含义。为了强制用户使用不同口令,可以使用口令历史选项。
1 --【实例16-3】为了防止用户devp 重用旧口令,强制该用户在口令终止10 天之内不能重 用以前口令。 2 --1)以管理员身份登录 3 SQL>CONNECT / AS SYSDBA 4 --2)创建概要文件,设定相关参数 5 SQL>CREATE PROFILE devp_his LIMIT PASSWORD_LIFE_TIME 10 PASSWORD_GRACE_TIME 2 PASSWORD_REUSE_TIME 10 PASSWORD_REUSE_MAX UNLIMITED; 6 配置文件已创建 7 --3) 分配概要文件给用户devp 8 SQL>ALTER USER devp PROFILE devp_his; 9 用户已更改。 10 -- 注意,前面已经提到过,当使用口令历史选项时, PASSWORD_REUSE_TIME 和 PASSWORD_REUSE_MAX 两个参数只能设置一个,另一个必须为UNLIMITED。 当将概要文件分配给用户devp 之后,如果前11 天没有修改用户口令,那么在第12 天 登录时,Oracle 会强制终止口令,并要求用户改变口令。但如果仍然使用过去的口令,则口 令修改不能成功,如下所示: 11 12 SQL>CONNECT devp/development 13 ERROR: 14 ORA-28001: the password has expired 15 更改devp 的口令 16 新口令: 17 重新键入新口令: 18 ERROR: 19 ORA-28007: the password cannot be reused 20 口令未更改 21
1.1.7.2.4 口令校验
口令校验是指使用PL/SQL 函数检查口令的有效性。在设置口令时,多数人都习惯于 按照自己易记的方式(如用户名、生日等)来指定口令。但如果其他人很了解用户的各种习惯, 那么口令将不再安全。通过使用口令校验函数,可以强制用户使用复杂的口令。尽管这种做 法会给用户带来一些小麻烦,但却可以大大加强口令的安全性。大家需要注意,如果要使用 口令校验函数,那么必须要以SYS 用户建立口令校验函数,并且口令校验函数必须满足如
下规范:
1 function_name( 2 userid_parameter IN VARCHAR2(30), 3 password_parameter IN VARCHAR2(30), 4 old_password_parameter IN VARCHAR2(30) 5 )
RETURN BOOLEAN
其中,userid_parameter 对应于用户名, password_parameter 对应于用户的新口令, old_password_parameter 对应于用户的旧口令。如果函数返回值为TRUE,则表示新口令可 以使用;但如果返回值为FALSE,则表示新口令不满足函数规则。另外, Oracle 也提供了 默认的口令校验函数VERIFY_FUNCTION,该口令校验函数具有以下一些功能:
• 口令最少为4 个字符。
• 口令不能与用户名相同。
• 新口令与旧口令至少有三个字符不同。
• 口令至少包含一个阿拉伯字母、一个数字和一个特殊字符。
可以通过以SYS 用户身份登录后运行脚本utlpwdmg.sql 来建立默认的口令校验函数, 脚本保存在ORACLE_HOME\rdbms\admin 目录中。DBA 也可以通过修改脚本来实现自己的 口令校验函数。
1 --【实例16-4】为用户devp 指定口令校验函数以强制它使用复杂口令 2 3 --1)以管理员身份登录 4 SQL>CONNECT / AS SYSDBA 5 已连接。 6 --2)运行脚本utlpwdmg.sql 建立默认口令校验函数VERIFY_FUNCTION。(当然也可自 己创建口令校验函数) 7 SQL>@%ORACLE_HOME%/rdbms/admin/utlpwdmg.sql 8 函数已创建。 9 --3)创建概要文件,设定参数 10 SQL>CREATE PROFILE devp_verify LIMIT PASSWORD_LIFE_TIME 10 PASSWORD_GRACE_TIME 2 PASSWORD_VERIFY_FUNCTION verify_function; 11 配置文件已创建 12 -4) 分配概要文件给用户devp 13 SQL>ALTER USER devp PROFILE devp_verify; 14 用户已更改。 15 -这样,当修改devp 用户口令时,如果不满足函数规则,会出错。如把devp 的口令改成 与用户名一样,则会显示如下错误信息: 16 SQL>alter user devp identified by devp; 17 alter user devp identified by devp 18 * 19 ERROR 位于第1 行: 20 ORA-28003: 指定口令的口令验证失败 21 ORA-20001: Password same as or similar to user 22 --另外,如果你不想使用口令校验函数,则可以将PASSWORD_VERIFY_FUNCTION 选 项设置为NULL。 23 24 25
1.1.7.3使用概要文件管理资源
概要文件不仅可用于管理用户口令,也可用于限制用户的资源占用。概要文件既可以限 制整个会话的资源占用,也可以限制调用级(SQL 语句)的资源占用。但大家需要注意,如果 要使用概要文件管理资源,则必须要激活资源限制功能,这可以通过设置初始化参数 RESOURCE_LIMIT 为TRUE 做到: ALTER SYSTEM SET RESOURCE_LIMIT=TRUE; 使用概要文件管理资源的步骤同管理口令的步骤一样,也是先创建概要文件,然后设置 相关资源参数,最后把概要文件分配给用户。1 CREATE PROFILE "TEMPPROFILE" 2 /*【一般信息】选项卡对应的配置参数*/ 3 LIMIT CPU_PER_SESSION 1000 --//CPU 会话 4 CPU_PER_CALL 1000 --//CPU 调用 5 CONNECT_TIME 30 --//连接时间 6 IDLE_TIME DEFAULT --//空闲时间 7 SESSIONS_PER_USER 10 --//并行会话数 8 LOGICAL_READS_PER_SESSION 1000 --//读取数/会话 9 LOGICAL_READS_PER_CALL 1000 --//读取数/调用 10 PRIVATE_SGA 16K --//专用SGA 11 COMPOSITE_LIMIT 1000000 --//组合限制 12 /*【口令】选项卡对应的配置参数*/ 13 FAILED_LOGIN_ATTEMPTS 3 --//允许输入的错误口令的次数 14 PASSWord_LOCK_TIME 5 --//输入错误口令而被锁定的天数 15 PASSWORD_GRACE_TIME 60 --//口令过期时间天数 16 PASSWORD_LIFE_TIME 30-- // 17 PASSWORD_REUSE_MAX 18 DEFAULT PASSWORD_REUSE_TIME 30 19 PASSWORD_VERIFY_FUNCTION DEFAULTV --//验证用户口令复杂度的函数1.1.7.3.1 限制会话资源
当用户连接到数据库时,Oracle 将创建一个会话(session)。每个会话都将消耗Oracle 所在计算机的CPU 时间及内存。用户可以在会话级( session level)设置多种资源限制 (resource limit)。
如果用户超过了某一会话级资源限制,Oracle 将终止(回滚)当前执行的语句,并通知 用户此会话超出资源限制。此时,当前会话内已经执行的语句不受资源限制的影响,而用户 则只能执行COMMIT,ROLLBACK,或断开连接(disconnect)(如断开连接,当前事务将 被提交)。用户的其他所有操作都将导致报错。在事务被提交或回滚后,用户在当前会话内 也不能执行其他任何操作。1 --【实例16-5】数据库最多允许两个开发人员以devp 用户登录进行应用开发,每个会话连接时间不能超过30min,会话空闲时间不能超过10min。 2 --1)以管理员身份登录 3 SQL>CONNECT / AS SYSDBA 4 已连接。 5 --2)创建概要文件,设定参数 6 SQL>CREATE PROFILE devp_session LIMIT CPU_PER_SESSION 5000 SESSIONS_PER_USER 2 CONNECT_TIME 30 IDLE_TIME 10; 7 配置文件已创建 8 --3) 分配概要文件给用户devp 9 SQL>ALTER USER devp PROFILE devp_session; 10 用户已更改。 11 --因为在建立概要文件时指定SESSION_PER_USER 选项为2,即允许用户最多可以同时建立两个会话,所以如果用户devp 的并发会话个数达到两个,那么当建立第三个会话时则会显示如下错误信息: 12 SQL>CONNECT devp/development 13 ERROR: 14 ORA-02391:exceeded simultaneous SESSIONS_PER_USER limit 15 --因为IDLE_TIME 选项被设置为10,所以如果会话空闲时间超过10min,那么Oracle会自动断开会话。管理员可以限制用户并发会话数(concurrent sessions for each user)。每个用户的并发会 话数不能超过预设值。
管理员可以限制一个会话的空闲时间(idle time)。如果会话内两次Oracle 调用间的间 隔时间达到了限制值,当前事务将被回滚,会话将被终止(aborted),会话所占用的资源将 被系统回收。下次会话将得到报错信息,提示用户已经终止了与实例的连接。此限制的设置 单位为分钟。
当会话由于超出空闲时间限制而被终止之后,进程监视器(process monitor,PMON) 后台进程将对被终止的会话进行清理。在PMON 完成此过程前,统计用户及会话资源使用 时仍将包含被终止的会话。
管理员可以限制每个会话的连接持续时间。如果会话持续连接时间超出限制值,当前事 务将被回滚,会话将被移除(dropped),会话所占用的资源将被系统回收。此限制的设置单 位为分钟。
Oracle 不会持续不断地监控会话的空闲时间及连接时间,因为这样做将降低系统性能。
Oracle 的做法是每隔数分钟检查一次。因此,在Oracle 依据资源限制终止会话前,会 话有可能已经略微超出了限制时间(例如,超出5 分钟)。1.1.7.3.2 限制调用资源
SQL 语句每次运行时,Oracle 都将执行一系列操作来处理此语句。在处理过程中,不 同的执行阶段需要向数据库发起不同的调用。为了防止某个调用过度地使用系统资源, Oracle 允许管理员在调用级(call level)设定多种资源限制(resource limit)。
如果用户超过了调用级资源限制,Oracle 将停止执行语句,并进行回滚,之后向用户 报错。此时,当前会话内已经执行的语句不受资源限制的影响,用户会话也将保持连接状态。
当Oracle 执行SQL 语句或用户的其他各类调用(call)时,系统需要一定的CPU 时 间来处理此调用。普通的调用所需的CPU 时间较少。但是需要处理大量数据的语句,或失 控的查询(runaway query)可能占用大量的CPU 时间,这减少了其他处理任务可用的CPU 时间。
为了防止CPU 时间被不受控地占用,管理员可以限制会话内每个调用使用的CPU 时 间,以及会话中所有Oracle 调用的CPU 时间之和。设置及衡量调用或会话可使用的CPU时间的单位为百分之一秒。1 ---【实例16-6】限制用户devp 的调用级资源。 2 --1)以管理员身份登录 3 SQL>CONNECT / AS SYSDBA 4 已连接。 5 --2)创建概要文件,设定参数 6 SQL>CREATE PROFILE devp_call LIMIT CPU_PER_CALL 200 LOGICAL_READS_PER_CALL 3; 7 配置文件已创建 8 --3) 分配概要文件给用户devp 9 SQL>ALTER USER devp PROFILE devp_call; 10 用户已更改。 11 --因为在建立概要文件devp_call 时指定了LOGICAL_READS_PER_CALL 选项为3,所以如果执行单条SQL 语句访问的数据块总数超过3,则会显示如下错误信息: 12 SQL> CONNECT devp/development 13 已连接。 14 SQL>select * from scott.emp; 15 select * from scott.emp 16 * 17 ERROR 位于第1 行: 18 ORA-02395: 超出IO 使用的调用限制
1.1.7.3.3 其他资源
1) 逻辑读取
输入/输出(Input/output,I/O)是数据库系统中开销最大的操作。I/O 操作密集的SQL 语 句可能会占用大量内存及硬盘,并与其他需要同样资源的数据库操作产生竞争。 为了防止I/O 被独占,Oracle 可以限制调用及会话的逻辑数据块读取(logical data block read)。逻辑数据块读取包含从内存及磁盘读取数据。设置及衡量调用或会话可使用的逻辑 读取的单位为数据块数量。
LOGICAL_READS_PER_SESSON:用于指定会话的最大逻辑读取次数.
LOGICAL_READS_PER_CALL:用于限制每次调用的最大逻辑I/O 次数.
2) CPU
可以每个会话或每个调用为基础限制CPU 资源。
“CPU/会话”限制为1,000 表示:
当使用此概要文件的任一会话占用10 秒以上的CPU 时间(CPU 时间限制以百分之一 秒为单位)时,该会话就会收到错误并被注销:
ORA-02392: exceeded session limit on CPU usage, you are being logged off每个调用限制的作用是相同的,但是它不是限制用户的整个会话,而是防止任一命令占 用过多的CPU。如果“CPU/调用”受到限制,而且用户超出了限制,命令就会中止,用户还 会收到错误消息,例如:
ORA-02393: exceeded call limit on CPU usage
CPU_PER_SESSION:用于指定每个会话可以占用的最大CPU 时间.
CPU_PER_CALL:限制每次调用(解析,执行或提取数据)可占用的最大CPU 时间(单位:百 分之一秒)
3) 网络/内存:每个数据库会话都会占用系统内存资源和网络资源(如会话来自服务 器的非本地用户)。可以指定以下参数:
- 连接时间:指示用户在自动注销前可以保持连接的分钟数
- 闲置时间:指示用户会话在自动注销前可以保持闲置的分钟数。只会计算服务 器进程的闲置时间。闲置时间中不考虑应用程序活动。IDLE_TIME 限制不受 长时间运行查询和其它操作的影响。
- 并行会话:指示使用数据库用户帐户可以创建多少并行会话
- 专用SGA:限制系统全局区域(SGA) 中执行排序、合并位图等操作占用的空间。
此限制仅在会话使用共享服务器时才有效。(在“配置Oracle Network 环境” 一课中会讨论共享服务器)。
PRIVATE_SGA:用于指定会话在共享池中可以分配的最大总计私有空间.需要注意,该选 项只使用与共享服务器模式.
COMPOSITE_LIMIT:用于指定会话的总计资源消耗(单位:服务单元).oracle 会根据
CPU_PER_SESSION,CONNECT_TIME,LOGICAL_READS_PER_SESSION 以及 PRIVATE_SGA 的求权结果取得总计服务单元.
SESSIONS_PER_USER:用于指定每个用户的最大并发会话个数.
CONNECT_TIME:用于指定会话的最大连接时间.
IDLE_TIME:用于指定会话的最大空闲时间.
通过概要文件还可提供组合限制。组合限制以“CPU/会话”、“读取/会话”、“连接时 间”和“专用SGA”的加权组合为基础。
下面以限制帐户DEVEP 会话占用CPU 时间不超过50 秒,逻辑读取次数不超过100 次为 例,说明使用PROFILE 限制会话资源的方法.为了控制会话资源,首先应执行CREATE PROFILE 命令建立PROFILE,然后使用ALTER USER 命令将PROFILE 分配给用户DEVEP.
CREATE PROFILE session_limit LIMIT
CPU_PER_SESSION 5000 LOGICAL_READS_PER_SESSION 100;ALTER USER devep PROFILE session_limit;
1.1.7.4其它操作
1.1.7.4.1 修改概要文件
当口令和资源限制无法满足用户的实际需求时,你就需要修改概要文件中的口令及资源 限制参数。修改概要文件是使用ALTER PROFILE 命令由DBA 来完成的;如果要以其它用 户身份修改概要文件,则要求该用户必须具有ALTER PROFILE 系统权限。需要注意,修改 概要文件对已存在会话没有影响,而只对新会话起作用。
1 --【实例16-7】修改用户devp 的口令和资源限制。 2 --1)以管理员身份登录 3 SQL>CONNECT / AS SYSDBA 4 已连接。 5 --2)修改概要文件 6 SQL>ALTER PROFILE devp_call LIMIT SESSIONS_PER_USER 2 FAILED_LOGIN_ATTEMPTS 2 CPU_PER_CALL 200; 7 配置文件已更改 8 --修改用户devp 当前的概要文件后,当devp 重新登录后,其口令和资源限制就发生变化 了,如该用户的口令失败次数只能两次。1.1.7.4.2 删除概要文件
当某个概要文件不需要时,可以删除它。删除概要文件是使用DROP PROFILE 命令由 DBA 来完成的,如果要以其他用户身份删除概要文件,则要求该用户必须具有DROP PROFILE 系统权限。1 --【实例16-8】删除概要文件devp_call 2 --1)以管理员身份登录 3 SQL>CONNECT / AS SYSDBA 4 已连接。 5 ---2)删除概要文件 6 SQL>DROP PROFILE devp_call CASCADE; 7 配置文件已丢弃 8 -- 需要注意,如果概要文件已经被分配给某个用户,那么当删除概要文件时必须带有CASCADE 选项。如果用户的概要文件已经被删除,Oracle 将自动为用户重新指定DEFAULT 概要文 件。 9
1.1.7.4.3 显示概要文件信息
Oracle 提供了几个数据字典视图查询有关概要文件的信息。下面分别介绍。
1) 显示用户的概要文件
当建立或修改用户时,通过PROFILE 子句可以为用户分配概要文件。如果没有显式地 分配概要文件,那么Oracle 会将DEFAULT 概要文件自动分配给用户。那么如何确定用户的 概要文件呢?通过查询数据字典视图BA_USERS,可以取得用户的概要文件信息。
1 --【实例16-9】查询用户devp 的概要文件 2 --1)以管理员身份登录 3 SQL>CONNECT / AS SYSDBA 4 已连接。 5 --2)查询 6 SQL>SELECT profile FROM DBA_USERS WHERE username=’DEVP’; 7 PROFILE 8 ------------------------ 9 DEFAULT
2) 显示概要文件的内容
数据字典视图DBA_PROFILES 中包含了每个概要文件的内容,通过查询该数据字典视 图可以取得用户的口令限制及资源限制信息。
1 --【实例16-10】查询概要文件devp_session 的口令和资源限制。 2 --1)以管理员身份登录 3 SQL>CONNECT / AS SYSDBA 4 已连接。 5 --2)查询 6 SQL>SELECT * FROM DBA_PROFILES WHERE profile=’DEVP_SESSION’; 7 PROFILE RESOURCE_NAME RESOURCE_TYPE LIMIT 8 ------------------------------------------------------------------------------------------------- 9 DEVP_SESSION CONNECT_TIME KERNAL 30 10 DEVP_SESSION IDLE_TIME KERNAL 10 11 DEVP_SESSION SESSIONS_ PER_USER KERNAL 3 12 DEVP_SESSION CPU_PER_SESSION KERNAL 5000 13 DEVP_SESSION PASSWORD_LIFE_TIME PASSWORD DEFAULT 14 /* 15 其中: 16 • PROFILE:概要文件名称。 17 • RESOURCE_NAME:口令或资源选项名。 18 • RESOURCE_TYPE:PASSWORD 表示口令管理选项,而KERNAL 则表示资源限 制选项。 19 • LIMIT:概要文件选项值。 20 */
1.1.7.5用控制台管理概要文件
用控制台管理概要文件过程如下:
1)以独立方式启动控制台,连接到要管理的数据库。展开数据库中的“安全性”项目, 然后选中其中的“概要文件”选项,如图16-1。
2)如果要创建概要文件,在“概要文件”选项上右击鼠标,然后在快捷菜单中选择“创 建”,弹出如图16-2 的对话框。进入“一般信息”选项卡,首先为新建的概要文件命名,然 后可以对各资源参数进行设置。在设置资源参数时,可以直接在文本框中输入参数值,也可 以从对应的下拉列表中选择一个适当的值。然后进入“口令”选项卡,设置概要文件中的口 令参数,如图16-3。
3)完成设置后,单击“创建”按钮。 如果要修改概要文件,在图16-1 对话框中双击要修改的概要文件,然后同步骤2 一样, 在各个选项卡中修改概要文件的口令和资源参数,最后按确定按钮。
图16-1 控制台中数据库的概要文件
Profile 概要文件是口令限制,资源限制的命名集合。建立oracle 数据库时,oracle 会自动 建立名为DEFAULT 的PROFILE,初始化的DEFAULT 没有进行任何口令和资源限制。
通过概要文件还可管理帐户状态并设置对用户口令的限制(长度、失效时间等)。每个 用户都分配一个概要文件,而且该用户在指定时间只属于一个概要文件。如果用户在您更改 用户概要文件时已经登录,那么所做更改只在用户下一次登录后才生效。
默认概要文件用作其它所有概要文件的基础。概要文件的限制可隐式指定(如“CPU/会 话”)、可取消限制(如“CPU/调用”),或引用默认概要文件中的任何设置(如“连接时间”)。 除非RESOURCE_LIMIT 初始化参数设置为TRUE,否则不能通过概要文件强行设置 用户的资源限制。如果RESOURCE_LIMIT 使用默认值FALSE,则忽略概要文件的限制。
1.1.8 表空间配额
对于没有UNLIMITED TABLESPACE 系统权限的用户,必须先给他们指定限额,之后 他们才可在表空间中创建对象。
限额可以是:
● 以兆字节或千字节为单位的特定值● 无限制
将限额分配给用户:
限额代表指定表空间中允许的空间容量。默认情况下,用户在任何表空间中都没有限额。
使用以下三个选项可提供用户的表空间限额。
● 无限制:允许用户最大限度地使用表空间中的可用空间。
● 值:用户可以使用的空间,以千字节或兆字节为单位。这并不保证为用户保留该空 间。因为,此值可能大于或小于表空间中的当前可用空间。
● UNLIMITED TABLESPACE 系统权限:此系统权限会覆盖各个表空间限额,并向 用户提供所有表空间(包括SYSTEM 和SYSAUX)的无限制限额。授予此权限时 必须谨慎。
注:请注意,授予RESOURCE 角色时包括授予此权限。 一定不能向用户提供关于SYSTEM 或SYSAUX 表空间的限额。通常,只有SYS 和 SYSTEM 用户才能在SYSTEM 或SYSAUX 表空间中创建对象。 不需要关于分配的临时表空间或任何还原表空间的限额。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
学问:纸上得来终觉浅,绝知此事要躬行
为事:工欲善其事,必先利其器。
态度:道阻且长,行则将至;行而不辍,未来可期
.....................................................................
------- 桃之夭夭,灼灼其华。之子于归,宜其室家。 ---------------
------- 桃之夭夭,有蕡其实。之子于归,宜其家室。 ---------------
------- 桃之夭夭,其叶蓁蓁。之子于归,宜其家人。 ---------------
=====================================================================
* 博客文章部分截图及内容来自于学习的书本及相应培训课程以及网络其他博客,仅做学习讨论之用,不做商业用途。
* 如有侵权,马上联系我,我立马删除对应链接。 * @author Alan -liu * @Email no008@foxmail.com
转载请标注出处! ✧*꧁一品堂.技术学习笔记꧂*✧. ---> https://www.cnblogs.com/ios9/