第三章Oracle安全管理.docx
《第三章Oracle安全管理.docx》由会员分享,可在线阅读,更多相关《第三章Oracle安全管理.docx(36页珍藏版)》请在冰豆网上搜索。
第三章Oracle安全管理
本章课时要求:
4课时
本章内容提纲:
安全管理概述(2课时)
用户管理
用户验证方式
创建用户
资源文件
维护用户
权限管理(2课时)
系统权限
实体权限
角色管理
角色的建立、删除、修改
角色权限的授予和收回
角色授予用户和收回
审计管理
语句级审计
权限级审计
实体级审计
3第03章ORACLE安全管理
.1安全管理概述
数据库安全是指保护数据库,防止数据库的数据泄漏、更改和破坏。
由于数据库是高度共享的大量数据集中的地方,所以安全问题尤其突出。
Oracle的安全有物理安全和逻辑安全两个方面。
物理安全是指数据库物理文件的安全。
由操作系统进行管理,如物理数据文件、系统文件、进程的安全,又称为外部安全。
逻辑安全是指数据库内部使用的安全。
主要指对使用数据库的用户进行安全管理(用户及权限)和跟踪审计,又称为内部安全。
Oracle的安全管理主要是逻辑安全,物理安全由Oracle的运行环境进行管理。
.2用户管理
用户管理主要管理用户名(口令、验证方式)、用户默认表空间、用户临时表空间、用户空间存储限制、用户资源限制等五个安全参数。
是从用户的角度说明创建和修改用户时的设置。
而用户操作权限的设置,是从权限的角度将权限赋予不同的用户,详见权限管理一节。
.2.1用户参数
在讲述用户的具体操作前,介绍在参数文件中的系统级别的用户数和会话数的限制设置。
所谓会话Session,是一个用户和数据库系统的一次连接,会话是从认证通过后开始,到用户注销结束。
可以将会话理解为一个用户连接User’sConnect。
许可方式:
Oracle数据库服务器有两种许可协议,会话许可协议和用户许可协议。
会话许可协议:
是按并发会话数量购买Oracle服务器软件,并限制并发会话数,当超过并发会话数时,禁止许创建新的会话。
一个用户可以同时创建多个会话,只对总会话数限制。
用户许可协议:
是按命令用户数购买Oracle服务器软件,并限制命名用户数量,当查过命令用户数量时,禁止创建新的用户。
不允许一个用户同时创建多个会话,一个用户同时只能创建一个会话。
参数文件中的用户参数限制有三个:
1.连接用户最大数设置:
license_max_users
设置允许同时连接的用户数(并发用户数)。
当超过该限制时,不允许其它用户连接数据库。
2.会话最大数设置:
license_max_sessions
设置允许同时发生的会话数(并发会话数)。
当超过设定值时,禁止创建新的会话。
3.会话警告数设置license_sessions_warning
当用户的会话数超过警告设置时,发出警告提示用户,但还是允许创建新的会话,直到会话达到最大会话数。
一般警告数小于或等于最大数会话数。
修改:
分静态修改和动态修改
(1)静态修改:
直接编辑参数文件initSID.ORA
(2)动态修改:
可以在线修改ALTERSYSTEMSETparameter=integer。
SQL>ALTERSYSTEMSETLICENSE_MAX_USRS=100
SQL>ALTERSYSTEMSETLICENSE_MAX_SESSIONS=50
SQL>ALTERSYSTEMSETLICENSE_SESSIONS_WARNING=45
注意:
在正式运行的系统中,不要将设置的参数超过购买时的许可。
查询:
参数文件或SHOWPARAMETER参数或参数视图v$parameter或$license视图;
SQL>SHOWPARAMETERlicense;
NAMETYPEVALUE
license_max_sessionsinteger0
license_max_usersinteger0
license_sessions_warninginteger0
视图$license可查询当前情况
USERS_MAX最大用户数
SESSIONS_MAX最大会话数
SESSIONS_WARNING警告数
SESSIONS_CURRENT当前会话数
SESSIONS_HIGHWATER会话最高水平
SQL>SELECT*FROM$license
.2.2验证方式
防止数据库被恶意破坏的第一道防线就是用户认证机制。
在用户访问数据库之前,用户必须被验证。
ORACLE提供了以下三种不同的验证方式:
什么是验证:
首先查询用户是否存在,如果存在,比较其密码是否正确。
若用户名和密码都正确,称为验证通过。
若其中之一不正确,验证不通过。
(1)数据库验证:
由数据库进行验证,数据库中保存用户名和用户密码(密码加密保存),数据库验证简单一致,但增加了数据库系统开销。
但是在数据库未打开之前,不能进行验证,所以对于链接后要进行数据库启动操作的系统账户,不能采用数据库验证。
(2)操作系统验证:
数据库的用户必须是操作系统的用户,操作系统用户=固定前缀+数据库用户名(由参数OS_AUTHENT_PREFIX确定),数据库见到此用户,交给操作系统验证。
口令用关键字EXTERNALLY代替。
数据库中只需要保存用户名,不需要保存用户口令,也不负责验证。
减少数据库的负载,有许多基于操作系统的验证方式都可以采用,如Kerberos验证、指纹验证等等,但是要创建操作系统用户,容易在操作系统管理员和数据库管理员之间造成不一致。
(3)全局集中验证:
基于LDAP(LightweightDirectoryAccessProtocol轻量级目录访问协议)将多个数据库的用户名和密码集中保存于全局验证服务器上,并统一管理。
当用户访问各个数据库系统之前,由验证服务器统一验证。
一个用户定义后,可以在分布式中的其它数据库中进行访问,并且使用不同的权限。
使用关键字GLOBALLY。
特点是集中管理,可以同时管理多个数据库用户,适合于分布式系统。
Oracle提供了一个全局服务器管理系统OESM(OracleEnterpriseSecurityManager),进行全局验证。
本章主要介绍使用比较多的数据库验证方式。
数据库验证的先决条件是数据库的运行,因此启动实例、加载数据库、打开数据库等操作的sys用户使用其它验证方式。
SYS用户的特殊验证方式:
(1)使用操作系统验证
①在操作系统中创建用户组ora_dba,该组具有sysdba或sysoper权限。
②创建sys用户,并加入ora_dba组中。
③设置参数:
remote_login_passwordfile=none
④登录用户CONNECTsysASSYSDBA
(2)使用口令文件验证
①使用orapwd.exe创建口令文件orapwd
orapwdfile=password=entries=
其中:
口令文件名,默认目录oracle_home\database,文件名pwdSID.ora
SYS的口令初始口令为change_on_install
可选项,设置具有SYSDBA/SYSOPER权限的最大用户数
注意在建立数据库时,已经建立了该文件,当修改SYS用户密码时自动修改该文件。
当普通用户被授予SYSDBA/SYSOPER权限时也自动修改该文件。
②设置参数:
remote_login_passwordfile=EXCLUSIVE|SHARED
其中:
EXCLUSIVE只有一个实例使用口令文件,并且允许除SYS意外的用户具有SYSDBA/SYSOPER权限和使用口令文件。
SHARED多个实例使用口令文件,并且只有SYS用户具有SYSDBA/SYSOPER权限和使用口令文件。
③如果是EXCLUSIVE选项,可以创建具有SYSDBA/SYSOPER权限的用户
SQL>CREATEUSERotherdbaIDENTIFIEDBYotherdbapassword;
SQL>GRANTsysdbaTOotherdba
SQL>SELECT*FROMv$pwfile_users;//查询口令文件中SYSDBA/SYSOPER权限的用户
④链接数据库
SQL>CONNECTsysASSYSDBA
SQL>CONNECTotherdba/otherdbapasswordASSYSDBA
.2.3创建用户
在用户连接数据库之前,先要创建用户,并对用户进行安全设置。
创建用户语法:
CTEATEUSERusername//用户名
IDENTIFIED[BYpassword|EXTERNALLY|GLOBALLY]//验证方式
[DEFAULTTABLESPACEtablespace]//用户默认表空间
[TEMPORARYTABLESPACEtablespace]//用户临时表空间
[QUOTA[integer|UNLIMITED]ONtablespace]//用户使用表空间的限制
[PROFILEprofilename]//用户使用的资源文件
1.用户名和口令
username:
用户名
BYpassword:
数据库验证方式的口令,
EXTERNALLY:
操作系统验证方式(无需口令)
GLOBALLY:
全局集中验证方式(无需口令)
2.用户默认表空间
存储用户对象(称为用户模式对象)的默认表空间,主要是指用户创建的表、簇、索引等用户数据所在表空间,所以又称为默认数据表空间。
为什么称为默认呢?
因为用户在创建对象时,可以指明表空间(实体优先原则)。
如果用户在创建时没有指明,则使用上述表空间,所以称为默认。
如果在创建用户没有指明默认表空间,则SYSTEM表空间为用户默认表空间,所以一般要求指定用户默认表空间,以防将用户数据存储在系统表空间SYSTEM中。
如何查询用户的默认表空间呢?
视图DBA_USERS中如:
SQL>SELECTusername,default_tablespaceFROMDBA_USERS;
同时也可以查看每一个表使用的表、簇、索引所在表空间,如:
SQL>SELECTtable_name,tablespace_nameFROMUser_Tables;
3.用户临时表空间
临时表空间是暂存用户排序、汇总等SQL语句产生临时数据的表空间,首先使用内存中的SORT_AREA区域,如果不够才使用临时表空间。
临时表中的临时段由系统在默认的临时表空间中自动创建,由系统监控进程SMON回收。
临时表空间容易产生磁盘碎片,所以系统中要将开辟一个专用的表空间作为全部用户的临时段的表空间。
创建本地方式的临时表空间时,必须使TEMPORARY指定,其对应的数据文件用TEMPFILE指定,不能使用其它的表空间作为临时表空间,临时表空间也不能保存永久性的数据。
如果在创建数据库时建立了系统默认临时表空间(DEFAULTTEMPORARYTABLESPACE),则所有用户默认的临时表空间为系统默认临时表空间。
所以为了统一使用系统默认临时表空间,一般要求在数据库创建时建立默认临时表空间,而不用在创建用户时一一指定。
如何查询用户的默认临时表空间?
SQL>SELECTusername,temporary_tablespaceFROMDBA_USERS;
4.用户使用表空间的限制
用户在指定的表空间使用磁盘空间的限制,可以指定多个表空间(一般为默认数据表空间),其中UNLIMITED没有限制(相当于省略)。
当用户在该表空间存储超过该限制后不能增加数据。
查询DBA_TS_QUOTAS视图查询用户表空间的限制情况,其中-1为UNLIMITED。
SQL>SELECTtablespace_name,blocks,max_blocks,bytes,max_bates
FROMdba_ts_quotas
ORDERBYusername;
其中blocks表示用户占用的块数,max_blocks为用户块限制(-1无限制)。
5.用户资源文件
指定用户使用的资源文件。
如果缺省,使用系统默认的资源文件defualt。
资源文件可以限制用户使用的资源,控制用户口令。
在资源管理一节中专门资源文件。
创建用户举例:
CREATEUSERuser1
IDENTIFIEDBYuser1passwd
DEFAULTTABLESAPCEsale
TEMPORARYTABLESPACEtemp
QUOTA50MONsale
PROFILEprofile_user1;
.2.4维护用户
1.修改用户
ALTERUSERusername//用户名
IDENTIFIED[BYpassword|EXTERNALLY|GLOBALLY]//验证方式及口令
[DEFAULTTABLESPACEtablespace]//用户默认表空间
[TEMPORARYTABLESPACEtablespace]//用户临时表空间
[QUOTA[integer|UNLIMITED]ONtablespace]//用户使用表空间的限制
[PROFILEprofilename]//用户使用的资源文件
可以修改用户的5参数。
但用户名不能修改,除非删除。
另外
ALTERUSERusernameACCONTLOCK加锁,不能使用
ALTERUSERusernameACCONTUNLOCK解锁
ALTERUSERusernamePASSWORDEXPIRE口令过期
举例:
ALTERUSERangle
IDENTIFIEDEXTERNALLY
DEFAULTTABLESPACEdata_tablespace
TEMPORARYTABLESPACEtemp_tablespace
QUOTA50MONdata_tablespace
QUOTA0MONSYSTEM
PROFILEfilenew;
2.删除用户
DROPUSERusername[CASCADE]
CASCADE标识删除用户的同时删除用户的模式对象(用户的拥有的实体),当没有CASCADE选项而用户有实体存在,则会提示并不允许删除。
当前正在连接的用户不能删除。
不能在线杀死用户,但可以杀死用户会话,使用会话标识号(‘SID,SERIAL#’)。
在V$SESSION中查询。
(同一用户可以有不同的会话号)
SQL>SELECTSID,Serial#,logon_time,username,machineFROMv$session;
SQL>ALTERSYSTEMKILLSESSION‘7,3’;
3.查询用户信息
系统视图DBA_USERS,ALL_USERS,USER_USERS保存用户的信息。
如:
USERNAME用户名
USER_ID用户ID
PASSWORD口令(加密)
ACCOUNT_STATUS用户状态(加锁LOCK,口令失效EXPIRE)
LOCK_DATE加锁日期
EXPIRY_DATE失效日期
DEFAULT_TABLESPACE默认数据表空间
TEMPORARY_TABLESPACE默认临时表空间
CREATED创建日期
PROFILE资源文件
SQL>SELECTusername,account_status,default_tablespace,temporary_tablespace
FROMdba_users;
.2.5特权用户
特权用户是只具有特殊权限(sysdba或sysoper角色)的用户,其主要作用是执行数据库的管理和维护工作,如启动和关闭数据库、建立数据库、备份和恢复数据库、建立和授权用户等。
从Oracle9i开始,在建立数据库时,建立了特权用户sys。
另外,当参数remote_login_passwordfile=exclusive时,可以将普通用户授予sysdba或sysoper角色。
需要注意的是,特权用户连接时,要使用ASSYSDBA或ASSYSOPER的子句。
特权用户的模式为SYS。
SYSDBA和SYSOPER的差别是,STSOPER不能进行建立和恢复数据库的操作。
.3资源管理
.3.1资源文件
所谓资源文件Profile,就是对用户口令和用户访问数据库资源进行限制的文件。
系统自动建立了一个默认的资源文件叫DEFAULT,用户缺省的资源文件。
可以建立新的资源文件或修改原有的资源文件(包括默认的资源文件)。
无论是缺省的资源文件还是新建的资源文件,要想资源文件资源部分起作用(口令总都起作用),必须设置参数文件:
RESOURCE_LIMIT=TRUE(默认为FALSE)
建立:
CREATEPROFILEprofilenameLIMIT[资源项参数]
修改:
ALTERPROFILEprofilenameLIMIT[资源项参数]
其中,资源项在后面讲述,参数的取值可以为UNLIMITED(无限制)、NULL(无)或DEFAULT(缺省值:
缺省资源文件DEFAULT的设置,当然缺省资源文件中就没DEFUAULT了,对DEFUALT的修改影响所有DEFAULT参数值)。
删除:
DROPPROFILEprofilename[CASCADE]
选项CASCADE,是删除用户正在使用的资源文件。
不能删除DEFAULT资源文件。
分配:
CREATE/ALTERUSERusernameIDENTIFIEDBYpassword
PROFILEprofile;可以多个用户使用相同的资源文件。
SQL>CREATEPROFILEpfileLIMIT
SESSION_PER_USER3
CPU_PER_SESSIONUNLIMITED
CPU_PER_CALL5000;
SQL>ALTERUSERuser1PROFILEpfile;
查询:
视图DBA_Profiles保存了所有资源文件的设置。
PROFILE资源文件名
RESOURCE_NAME资源项目名
RESOURCE_TYPE值类型(KERNEL核心PASSWORD口令)
LIMIT限制值
资源文件注意事项:
(1)动态分配新资源文件,不会影响当前会话。
(2)资源文件只能分配用户,不能分配给角色。
(3)建立用户时,未分配资源文件,使用默认的资源文件DEFAULT。
(4)一个用户只能使用一个资源文件。
(5)一个资源文件可以包含多个用户。
(6)资源文件其作用,参数项RESOURCE_LIMIT设为TRUE。
(7)资源文件包含了口令限制和资源限制。
.3.2口令管理
虽然名称上称为资源文件,但其中有7个资源项是对口令进行限制(resource_type=password)。
(1)FAILED_LOGIN_ATTEMPTS单位:
次
设置用户尝试登录的次数n,即连续登录失败的次数n。
如果连续登录n次都不成功,该帐号被加锁,加锁后的帐号不能连接。
如:
设置连续登录3次失败后加锁帐号。
FAILED_LOGIN_ATTEMPTS3
(2)PASSWORD_LOCK_TIME单位:
天数
如果用户连续登录失败的次数超过FAILED_LOGIN_ATTEMPTS设定的次数,帐号被加锁。
PASSWORD_LOCK_TUME设定加锁的天数。
加锁天数到后,帐号自动解锁。
当然在这期间,可以由DBA解锁。
ALTERUSERuser1ACCOUNTUNLOCK。
如设置加锁天数为10天:
PASSWORD_LOCK_TIME10
(3)PASSWORD_LIFE_TIME单位:
天数
为了保证口令的安全性,要求用户在一定时间内更改用户口令。
PASSWORD_LIFE_TIME设置用户口令的有效期,到达有效后,要求用户修改口令,但不加锁帐号。
如有效期为半月:
PASSWORD_LIFE_TIME15
(4)PASSWORD_GRACE_TIME单位:
天数
用户口令的有效期到后,要在多少天内修改(宽限期),宽限期从用户口令失效后的第一次登录开始计算,而不是从失效期到达后开始算。
在宽限期内,没有更改口令之前,则显示一条警告信息,提示用户更改口令。
宽限期到后如果仍未更改用户口令,如果用户登录,则强制更改:
changingpasswordforuser1,newpassword:
宽限期到后如果仍未更改用户口令,如果用户未登录,则锁定用户。
PASSWORD_GRACE_TIME2
(5)PASSWORD_REUSE_TIME单位:
天数
为了防止用户反复使用相同的口令,对口令的历史进行限制。
PASSWORD_RESUE_TIME设置一个原来使用过的口令经过多少天今才能重新使用。
PASSWORD_REUSE_TIME60
(6)PASSWORD_REUSE_MAX单位:
次数
除了可以限制重新使用旧口令的天数外,也可以从口令间隔来限制。
PASSWORD_REUSE_MAX设置一个旧重复使用前,必需使用其它口令的次数(间隔),无限制设置为null,不是UNLIMITED。
注意不要理解为一个口令使用的总次数。
注意:
PASSWORD_REUSE_MAX和PASSWORD_REUSE_TIME只设置一个。
PASSWORD_REUSE_MAX10
(7)PASSWORD_VERIFY_FUNCTION函数名
为了防止用户设置简单的口令,可以从口令长度、是否与用户名相同等方面对口令进行限制,该参数设置检验新口令是否有效的PL/SQL函数,称为口令检验函数。
若无口令检验函数,设置为null。
如果该函数返回true,则新口令有效,如果返回false,则新口令无效。
PASSWORD_VERIFY_FUNCTIONpassword_verify_function
口令检验函数必需以sys用户的身份建立,其函数规范如下:
function_name(
usernameinvarchar2(30),
new_passwordinvarchar2(30),
old_passwordinvarchar2(30))
returnboolean
Oracle提供了一个默认的口令检验函数verify_function,该函数由utlpwdmg.sql脚本生成。
verify_function的口令限制是;
①口令长度最少为4字符;
②口令不能与用户名相同;
③新口令和旧口令至少有3个不同的字符;
④口令至少包含一个字母、一个数字、一个特殊符号。
口令管理举例:
SQL>CREATEPROFILEpassword_profileLIMIT
FAILED_LOGIN_ATTEMPTS5
PASSWORD_LOCK_TIME10
PASSWORD_LIFE_TIME30
PASSWORD_GRACE_TIME5
PASSWORD_REUSE_TIME60
PASSWORD_REUSE_MAX10
PASSWORD_VERIFY_FUNCTIONverify_function;
SQL>ALTERUSERuser1PRO