安全性是每个网站必须密切关注的问题。每个组织都应该有一份有关规则和规程的安全手册。出现安全问题时,管理员必须说出所遵循的安全准则,并提供能证明他确实按要求执行的记录。这样,责任将转嫁到规范说明书的制定者身上。如果没有这样的手册,那么责任往往会推到数据库管理员DBA身上。
6.1创建和管理数据库用户账户
当用户登录到数据库时,通过指定一个账户名以及某种身份验证方式连接到用户账户。用户账户定义初始访问权限及会话属性。“模式(schema)与用户账户相关联。在ORACLE环境中,“用户”、“用户账户”和"模式“常替换使用,但这些术语其实并不完全相同。用户指的是通过某个用户账户名建立针对实例的会话并进行登录来连接到该账户的个人。模式是用户账户拥有的一组对象。账户创建方式将为会话设置一系列属性,在会话进行期间,可更改其中的一部分。创建数据库时创建了大量账户,DBA通常将在后面创建更多账户。
6.1.1用户账户属性
用户账户拥有很多在创建账户时定义的属性。这些将应用于连接到账户的会话,在会话运行期间,DBA或会话可以更改其中一些属性。这些属性如下:
用户名
身份验证方法
默认表空间
表空间配额
临时表空间
用户配置文件
账户状态
在创建用户时,将指定以上属性,不过,其中只有用户名和身份验证方法是必需的,其他 的都有默认值
1 用户名
数据库中的用户名必须是唯一的,并符合特定的规则。用户名必须以字母开头,字符数不能超过30个,只能包含字母,数字,美元字符和下划线。用户名不能是保留字。字母区分大小写,但所有字母将自动将自动转换为大写字母。如果在双引号中指定用户名,可以不遵守这些规则(长度除外),最好始终使用大写字母和标准字符。
2 默认表空间和配额
每个用户账户都有默认表空间。用户创建的任何模式对象(如表和索引)将保存在此表空间中。
用户可以拥有获得配额的任何表空间上的对象,但除非在创建对象时指定另一个表空间,否则对象将被放在用户的默认表空间中。
如果在创建用户时未指定默认表空间,那么,数据库范围的默认表空间将应用于所有用户账户。可以在创建数据库时设置默认表空间,也可以以后使用下面的语法进行更改:
alter database default tablespace tablespace_name;
如果创建数据库时未指定默认表空间,将SYSTEM设置为默认表空间。
提示:创建数据库后,勿将SYSTEM作为默认表空间。这是一项后果严重的实践,因为可能有非系统用户填充这个表空间,从而妨碍数据字典及至整个数据库的操作。请立即进行更改。
“配额(quoat)”是表空间中为用户的模式对象分配的空间量,到达配额之前。用户可以创建对象,并为其分配区间。如果表空间中的配额已经用尽,则将无法创建任何对象。到达配额之前,用户可以创建对象,并为其分配区间。如果表空间中的配额已经用完。则将无法创建任何对象。配额可以修改:
要创建表,用户必须具有执行CREATE TABLE 的权限,而且拥有在其中创建表的表空间上的配额。
3 临时表空间
永久对象存储在永久表空间中,而临时对象存储在临时表空间中。如果会话为执行某些操作,需要的空间量走出了会话PGA的可用空间量,则将需要临时表空间中的空间。请注意,PGA是程序全局区,是分配给会话的专用内存。需要临时工空间的操作包括排序行,联接表,构建索引和使用临时表。会为每个用户账户分配临时表空间,但连接到该账户的的有用户会话将共享此临时表空间。
临时表空间中的空间管理完全自动完成。数据库根据需要创建和删除临时对象。不需要为用户授予临时表空间上的配额。其原因是,临时表空间中的对象并不归用户真正拥有,而是属于SYS用户,SYS用户拥有所有表空间上的无限配额。
4 配置文件
用户的配置文件控制口令设置,并在一定程度上控制资源的使用。配置文件是管理口令和资源的有效方法,但实际上只适用于每个应用都有自己的数据库用户账户的环境。
5 账户状态
每个用户账户都要一定的状态,如DBA_USERS的ACCOUNT_STATUS所列出的那样。有九种可能的状态。
打开(OPEN)账户可供使用
锁定(LOCKED)表示DBA故意锁定账户,任何用户都不能连接到锁定的账户。
过期(EXPIRED)表示口令生命周期已经终结。任何用户都不能连接到EXPIRED账户。
过期并锁定(EXPIRED&LOCKED)账户不仅被锁定,而且其口令已经过期。
正常过期:口令在生命周期结束时并不立即过期;可以配置一个正常时间段,在此期间,连接到相应账户的用户机会更改口令
超时锁定:这表示由于登录尝试失败,账户已被锁定。
过期并超时锁定
正常过期并锁定
正常过期并超时锁定
要锁定账户和解除账户的锁定,请使用以下命令:
alter user username account lock;
alter user username account unlock;
要强制用户更改口令,请使用以下命令:
alter user username PASSWORD expire;
这将立即开启正常阶段,强制用户在下次尝试登录时更改口令
6.1.2 身份验证方法
用户账户必须具有身份验证方法:数据库可以借助这些方法,确定尝试创建会话的用户是否有权这么做。最简单的技术是提供一个与数据库中存储的口令匹配的口令,除此之外,还有其他方法:
操作系统身份验证
口令文件身份验证
口令身份验证
外部身份验证
全局身份验证
前两项技术仅供管理员使用,最后一项技术要求使用LDAP目录服务器。LDAP目录服务器是Oracle Internet Directory ,作为Oralce应用服务器的一部分发布。
1 操作系统和口令文件身份验证
要为账户启用操作系统和口令文件身份验证,必须为用户授予SYSDBA或SYSOPER权限:
grant [ sysdba | sysoper ] to username;
如果向用户授予这些权限之一或所有权限,则会将用户口令人数据字典复制到外部口令文件中,此时,即使数据库未处于打开状态,实例也可以读取口令。
必须对所有用户会话进行身份验证,不存在"匿名登录“的说法,必须使用一些身份验证方法。
2 口令身份验证
在使用SQL*PLUS 时,通过口令身份验证进行连接的语法如下:
connect username / password [ @db_alias] ;
或在使用Database Control 时,从Connect As 下拉框中选择NORMAL
在使用口令身份验证进行连接时,实例将针对在数据字典中的用户账户存储的口令,验证给定的口令。为此,数据库必须处于打开状态:从逻辑上讲,在使用口令身份验证连接时,不可能发出STARTUP命令或SHUTDOWN命令。更改口令的语法为:
alter user username identified by password;
3 外部身份验证
如果使用外部身份验证创建用户账户,ORACLE 会将身份验证委托给外部服务。它不会提示输入口令。
4 全局身份验证
一个用于管理身份的新兴标准是使用LDAP服务器。Oracle Internet Directory符合LDAP标准,
可以在目录,也可以在数据库中定义用户,
只能在目录中定义用户
6.1.3 创建账户
create user 命令包含两个必需的参数:用户名和身份验证方法。它可选地接受指定默认表空间和临时表空间的子句,一个或多个配额子句,命名配置文件以及锁定账户
和使用口令过期的命令。
一个典型例子如下:
create user scott identified by tiger
default tablespace users temporary tablespace temp
quota 100m on users, quota unlimited on example
profile developer_profile
password expire
account unlock;
只有第一行是必须的,更改口令语法:
alter user scott identified by lion;
要更改默认表空间和临时表空间,请:
alter user scott default tablespace store_data temporary tablespace temp;
要更改配额,请使用下面的语法:
alter user scott quota unlimited on store_data,quota 0 on users;
要更改配置文件,请使用下面的语法
alter user scott profile prod_profile;
要强制更改口令,请使用下面的语法:
alter user scott password expire;
要锁定账户,请使用下面的语法:
alter user scott account lock;
如果创建了用户账户,则可能需要删除它;
drop user scott;
只有用户不拥有任何对象时,此命令才能成功;即要示模式是空的。可以指定CASCADE 将这些与用户一起删除;
drop user scott cascade;
要使用Database Control管理账户,请在数据库主页选择Schema选项卡,然后单击Security部分中的USER连接。这将显示数据库中所有用户账户。