第8章安全管理内容提要本章从数据库用户管理、权限管理及资源限制管理几个方面介绍Oracle数据库的安全性策略。数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。Oracle作为一种大型的数据库系统,其安全问题更为突出。为此,Oracle数据库一面要检查用户的合法性,只有合法的用户才能登录到数据库系统;另一方面数据库系的各个用户有着不同的管理和操作权限,登录后只能在自己所拥有权限范围内执行相应的操作。8.1用户管理用户是定义在数据库中的一个名称,它是Oracle数据库的基本访问控制机制。当用户要连接到Oracle数据库以进行数据访问时,必须要提供合法的用户名及其口令,如CONNECTscott/tiger。Oracle数据库是可以为多个用户共享使用的,一个数据库中通常会包含多个用户。数据库在新建后通常会自动建好一些用户,其中最重要的有sys和system两个管理员用户及scott等一些普通用户。数据库每个用户都可以拥有自己的对象,一个用户所拥有对象的集合称为一个模式,用户与模式具有一一对应的关系,并且两者名称相同。不同模式中可以具有相同的数据库对象名,即不同用户下的对象名称可以相同。对象的访问格式为[模式名.]对象名,只有访问自己模式对象时,模式名才可以省略。例如,用户userl和用户user2都建立有名称为t的表。用户userl的表t属于userl模式,user2的表t属于user2模式。用户userl如果要访问自己模式的表t,访问格式t或userl.t都是可以的,但是如果访问user2模式对象t,则必须使用user2.t格式。数据库管理员可以定义和创建新的数据库用户,可以为用户更改口令,可以锁定某用户禁止其登录数据库,总之,用户管理工作是数据库管理员的职责之一。创建用户必须具有CREATEUSER系统权限。通常情况下只有数据库管理员或安全管理员才拥有CREATEUSER权限。创建用户时除了指定用户名外,还要指出验证方式、默认使用表空间、空间使用限额、用户是否被锁定、用于资源限制的概要文件等选项。验证方式包括数据库口令验证、操作系统验证。数据库口令验证要求用户登录时必须要提供口令。例如,创建新用户jwcuser:SQLCREATEUSER]WCUSerIDENTIFIEDBYwelcomel35DEFAULTTABLESPACEeduTEMPORARYTABLESPACEtempQUOTA10MONeduQUOTA2MONusersPASSWORDEXPIRE;该命令创建的用户为jwcuser,采用数据库口令验证,口令为welcomel35;存储对象默认使用edu表空间,临时表空间为tempQUOTA选项指定该用户在某个表空间的最大使用空间(默认情况下,用户在任何表空间上都没有限额),此处意即在edu表空间上最多可使用10MB空间、在users表空间上使用限额为2MB;PASSWORDEXPIRE选项指示口令过期,这要求用户第一次登录时就要更改口令。又如,创建用户rscuser:SQLCREATEUSERrscuserIDENT工F工EDEXTERNALLYDEFAULTTABLESPACEusersTEMPORARYTABLESPACEtempQUOTAUNLIMITEDONusers;创建的用户rscuser采用操作系统验证,存储对象默认使用users表空间,且在该表空间上所能使用的存储空间不受限制,临时表空间为temp。下面命令所创建的用户为testuser,口令以数字开头(此时需要双引号),所建用户处于锁定状态被禁止登录数据库。SQLCREATEUSERtestuserIDENTIF工EDBY”123456”ACCOUNTLOCK;由于没有指明默认表空间,因此将采用SYSTEM作为用户默认的表空间,考虑到系统性能问题,建议指明一个非系统表空间。8.1.2特权用户特权用户是指具有特殊权限(SYSDBA或SYSOPER)的数据库用户,这类用户主要用于执行数据库的维护操作,例如,启动和关闭数据库、建立数据库、备份和恢复等任务。从Oracle9i开始,当建立实例服务时会建立名称为sys的特权用户。另外,当将初始化参数REMOTE-LOGIN_PASSWORDFILE设置为EXCLUSIVE时,还可以将SYSDBA和SYSOPER特权授予其他用户。需要注意的是,从Oracle9i开始,sys用户或其他欲以特权身份登录的用户登录必须带有AsSYSDBA或ASSYSOPER子句,而且特权用户都对应sys用户,图8—1验证了这一点。以SYSDBA和SYSOPER登录都可以执行启动和关闭数据库的操作,但是SYSDBA更高,不仅具有SYSOPER的所有权限,并且还具有建立数据库以及执行不完全恢限。8-1SYSDBA和SYSOPER权限类别示例SYSOPERSTARTUPSHUTDOWNAIJERDAIlABASEOPENlMOUNTALTERDATABASEBACKUPCoNTRoLFILERECOVERDATABASEAIJTERDATABASEARCHIVELoGRESTRICTEDSESSIONSYSDBASYSOPERPRIVILEGESWITHADMINOPTIONCREATEDATABASEALTERTABLESPACEBEGIN/ENDBACKUPRECOVERDATABASEUNTIL8.1.3修改用户1.更改口令使用ALTERUSER命令可以修改用户的信息,但是需要由DBA或者具有ALTERUSER系统权限的用户来完成。用户经常更改登录口令是一个不错的习惯。每个用户都可以使用如下命令修改其自身口令:SQLALTERUSERtestuserIDENTIFIEDBYertghj当用户遗忘了口令无法登录时,可以由DBA使用上述命令为其重设一个新口令。2.更改某个表空间的使用配额用户在某个表空间的使用配额可能会根据实际情况有所调整。例如,当用户在一个表上执行INSERT、UPDATE操作时总是出现错误(0RA一01536:spacequotaexceededfortablespace·edu’),但SELECT和DELETE操作却没有问题。此时可能是由于用户在该表所在的表空问上已经占满了空间配额所致,DBA需要修改以增大表空间配额,使用命令为:SQLALTERUSERjwcuserQUOTA15MONedu;有时候不希望用户再使用某表空间,可以将其在该表空间上的空间配额改成:SQLALTERUSERjwcuserQUOTA0ONusers;需要注意的是,如果用户jwcuser在users表空间上拥有表t,则该对象仍然保留,只是不会再为该表分配新的空间。3.更改用户的状态不希望某用户使用数据库数据时,可以将此用户进行锁定:SQLALTERUSERtestuserACCOUNTLOCK;而解除对testuser用户账户的锁定,使用如下命令:SQLALTERUSERtestuserACCOUNTUNLOCK;删除用户之后,Oracle会从数据字典中删除用户及该用户拥有对象的信息。例如:SQLDROPUSERtestuser;以上命令会删除用户testuser,但是,如果该用户拥有数据库对象,则删除时必须带有CASCADE选项,否则会显示如下错误信息:ORA一01922:CASCADEmustbespecifiedtodrop’TESTUSER’应该使用如下格式删除命令:SQLDROPUSERtestuserCASCADE;需要注意的是,当前正在连接的用户是不能删除的。通过数据字典dba_users、dbatsquotas、user_users、user_ts_quotas等可以查询出用户相关信息。例如,查询jwcuser用户的默认表空间、临时表空间、账号状态信息。SQLSELECTdefault_tablespace,temporary_tablespace,account_statusFROMdbausersWHEREusername=’JWCUSER’;又如,iwcuser用户想了解自己能使用的表空间、已使用空间及能使用的最大空间情况,可执行如下SQL语句:SELECTtablespace—name’‘表空间”,blocksn已占用块总数n,max—blocks--可占用的最大块数”FROMuser一ts—quotas;表空间已占用块总数可占用的最大块数SYSTEM2240USERS344OTT40一1其中,max二blocks表示用户数据对象可占用的最大块数,一1表示无限制。特权用户具有启动、关闭数据库等特权,通过查询动态性能视图v$pwfile_users,可以确定有哪些特权用户及他们有哪些特权。8.2权限管理权限用于限制用户可执行的操作,即限制用户在数据库中或对象上可以做什么,不可以做什么。新建立用户没有任何权限,不能执行任何操作,只有给用户授予了特定权限或角色之后,该用户才能连接到数据库,进而执行相应的SQL语句或进行对象访问操作。8.2.1权限类型Oracle中权限分为系统权限和对象权限两种类型。1.系统权限系统权限是在数据库中执行某种操作,或者针对某一类的对象执行某种操作的权力。系统权限并不针对某一个特定的对象,而是针对整个数据库范围。比如,在数据库中创建空间的权力(对应的系统权限名称为CREATETABLESPACE),或者为其他模式创建表权力(对应的系统权限名称为CREATEANYTABLE)。表8.2系统权限举例系统权限含义注意CREATETABLESPACECREATEUSERCREATETABLECREATEPROCEDURECREATETRIGGERCREATEANYTABLESELECTANYTABLEUPDATEANYTABLECREATEDATABASELINKCREATEPUBLICDATABASELINKCREATESYNONYMCREATEPUBLICSYNONYM连接数据库创建表空间创建用户创建表创建存储过程、函数和包创建触发器任何模式下创建表检索任何模式下表更新任何模式下表数据创建数据库链接创建公共数据库链接创建同义词创建公共同义词没有CREATEINDEX系统权限:当用户具有CREATETABLE系统权限时,自动在相应表上具有CREATEINDEX系统权限当用户具有CREATETABLE、CREATEPROCEDURE等系统权限时,自动具有修改和删除其模式对象的权力2.对象权限对象权限是一种对于特定的表、视图、序列、过程、函数或程序包执行特定操作的一种权限或权利。表8—3列出了Oracle所提供的对象权限。Oracle所提供的对象权限对象权限表视图序列过程ALTER√√√DELETE√√EXECUTE√INDEX√√INSERT√√REFERENCES√SELECT√√√UPDATE√√注意,UPDATE与INSERT权限可以具体限制到某些列上,而SELECT权限只能限制在整个表。8.2.2授予权限授予权限是通过GRANT命令实现的,但是根据授予的是系统权限还是对象权限GRANT命令语法是有区别的。1.授予系统权限CREATESESSl0N是一个用户访问数据库必须至少具有的系统权限,下面的命令将该系统权限授予用户jwcuser:SQLGRAINTCREATESESSIONTO]wcuser;又如,将CREATESESSION与CREATETABLE两种系统权限同时授予testuser用户:SQLGRANTCREATESESSION,CREATETABLETOtestuser;再如,将CREATESESSION系统权限授予所有用户:SQLGRANTCREATESESSIONTOPUBLIC;这里的PUBLIC实际上是Oracle自动创建的用户组,每个数据库用户都会自动成为PUBLIC组中的成员。利用PUBLI