第1页第13章安全性管理本章概述本章的学习目标主要内容第2页本章概述安全性是衡量数据库产品性能的重要指标。本章介绍Oracle11g数据库的安全管理机制,内容包括用户管理,权限管理,角色管理,数据库审计等。第3页本章的学习目标:●了解用户、权限、角色的概念及作用●学会创建、修改、删除用户●学会将系统权限和对象权限授予用户,以及回收权限●学会使用系统预定义角色,学会创建自定义角色,以及角色权限的授予和回收●了解数据库审计的概念及作用第4页主要内容13.1概述13.2用户管理13.3权限管理13.4角色管理13.5数据库审计13.6小结13.7习题第5页安全性在数据库管理中占据重要的位置,没有完善的安全机制的保护,可能会导致数据的泄露、损坏或丢失,因此安全性一直是数据库产品性能的重要衡量指标之一。Oracle数据库的安全管理是从用户登录数据库就开始的。数据库访问的安全性主要包括两个方面的含义:一是阻止未授权用户访问数据库;二是每个数据库用户都有不同的操作权限,用户在数据库中的操作将被限制在其权限范围内。在Oracle数据库中,用户的身份通常被划分为数据库管理员和开发人员,其中数据库管理员承担管理数据库的责任,包括安全性管理、调优、备份策略的制定、数据库出现故障时的数据恢复、保证数据库的可用性等。软件系统的开发人员作为数据库管理员之外的一类使用者,承担软件开发的职责,对数据库的访问要求及技能掌握要求比数据库管理员低,他们需要熟练掌握的SQL及PL/SQL的操作技能,能够快速及高效率地完成对数据库的操作需求,对调优和备份恢复等操作通常不参与。所以,数据库的安全管理通常属于数据库管理员的职责,DBA可以通过管理用户、角色以及权限来控制数据库的安全。但对于软件开发人员来说,掌握一些安全机制及处理方式也是有必要的。第6页主要内容13.1概述13.2用户管理13.3权限管理13.4角色管理13.5数据库审计13.6小结13.7习题第7页13.2用户管理用户是数据库的使用者和管理者,用户管理是Oracle数据库安全管理的核心和基础。每个连接到数据库的用户都必须是系统的合法用户,用户要想使用Oracle的系统资源(查询数据、创建表等),就必须要拥有相应的权限。Oracle数据库的用户管理包括创建用户、修改用户的安全参数、删除用户和查询用户信息等。第8页13.2.1初始用户在创建Oracle数据库时会自动创建一些用户,例如SYS、SYSTEM、SCOTT等,除了SYS、SYSTEM这两个初始合法的管理员,其余用户在创建后处于锁定状态,需要在安装时或者安装后对其解锁并重新设定口令。这些初始用户有其自身的职责和特点,软件项目一般不建议使用这些初始用户。即针对不同的项目,应该由管理员分配不同的用户,在开发过程中,SCOTT用户可以用来测试数据库的可用性。lSYS:是数据库中具有最高权限的数据库管理员,可以启动、修改和关闭数据库,拥有数据字典。lSYSTEM:是辅助数据库管理员,不能启动和关闭数据库,可以进行一些其他的管理工作,例如创建用户、删除用户等。lSCOTT:数据库的测试用户,默认口令为tiger。在该用户下已经创建了一些数据表,用于用户学习及测试网络连接,包括:EMP表、DEPT表等。第9页13.2.2相关属性和用户相关的属性包括以下几种。(1)用户身份认证方式在用户连接数据库时,必须经过身份认证。Oracle数据库用户有3种身份认证。数据库身份认证:这种方式即用户名/口令方式,用户口令以加密方式保存在数据库内部,用户连接数据库时必须输入用户名和口令,通过数据库认证后才能登录数据库。这是默认的认证方式。外部身份认证:用户账户由Oracle数据库管理,但口令管理和身份验证由外部服务完成,外部服务可以是操作系统或网络服务。当用户试图建立与数据库的连接时,数据库不会要求用户输入用户名和口令,而从外部服务中获取当前用户的登录信息。这种方式比较适合在局域网环境下,连接简单,不需要提供用户名和口令,但是需要在创建用户时做一些相应的配置。第10页全局身份认证:当用户试图建立与数据库的连接时,Oracle使用网络中的安全管理服务器(OracleEnterpriseSecurityManager)对用户进行身份认证。和外部身份认证相同,用户账户由数据库管理,但Oracle不保存口令,当用户登录时,需要通过网络服务验证。Oracle的安全管理服务器可以提供全局范围内管理数据库用户的功能。(2)表空间配额表空间配额限制用户在永久表空间中可用的存储空间大小,默认情况下,新用户在任何表空间中都没有任何配额。用户在临时表空间中不需要配额。(3)默认表空间用户在创建数据库对象时,如果没有显示指明该对象在哪个空间,那么系统会将该对象自动存储在用户的默认表空间中,即SYSTEM表空间。一般不建议将用户的对象建立在SYSTEM表空间中,所以默认表空间应指定。第11页(4)临时表空间如果用户执行一些操作例如排序、汇总和表间连接等,系统会首先使用内存中的排序区SORT_AREA_SIZE,如果这块排序区大小不够,则将使用用户的临时表空间。一般使用系统默认临时表空间TEMP作为用户的默认临时表空间。(5)账户状态在创建用户时,可以设定用户的初始状态,包括用户口令是否过期、用户账户是否锁定等。已锁定的用户不能访问数据库,必须由管理员进行解锁后才允许访问。数据库管理员可以随时锁定账户或解除锁定。(6)资源配置每个用户都有一个资源配置,如果创建用户时没有指定,Oracle会为用户指定默认的资源配置。资源配置的作用是对数据库系统资源的使用加以限制,这些资源包括:口令是否过期,口令输入错误几次后锁定该用户,CPU时间,输入/输出(I/O)以及用户打开的会话数目等。第12页13.2.3创建用户创建数据库用户的语法如下:CREATEUSERuserIDENTIFIED{BYpasswore|EXTERNALLY}[DEFAULTTABLESPACEtablespace][TEMPORARYTABLESPACEtablespace][QUOTA{integer[K|M]|UNLIMITED}ONtablespace[QUOTA{integer[K|M]|UNLIMITED}ONtablespace]…][PASSWORDEXPIRE][ACCOUNT{LOCK|UNLOCK}][PROFILE{profile|DEFAULT}]第13页参数说明:user:要创建的用户名;BYpassword:用户通过数据库验证方式登录,登录时需要提供的口令;EXTERNALLY:用户需要通过操作系统验证;DEFAULT或TEMPORARYTABLESPACE:为用户指定默认或临时表空间;QUOTA:定义在表空间中允许用户使用的最大空间,可将限额定义为整数字节或千字节/兆字节。其中关键字UNLIMITED用户指定用户可以使用表空间中全部可用空间;PASSWORDEXPIRE:强制用户在使用SQL*Plus登录到数据库时重置口令(该选项仅在用户通过数据库进行验证时有效);ACCOUNTLOCK|UNLOCK:可用于显示锁定或解除锁定用户账户(UNLOCK为缺省设置);PROFILE:指定用户的资源配置。第14页【例13-1】创建用户rose,口令为zzuli,默认表空间为USERS,在该表空间的配额为50MB。口令设置为过期状态,即首次连接数据库时需要修改口令。(如果在SQLPlus中创建用户成功,最后会显示个用户已创建。之类的,最好写在例题下面,表示这是运行成功的代码,你实验一下,看看创建完结果是什么,写到下面。后面的例题都是这样的吧)SQLCREATEUSERroseIDENTIFIEDBYzzuli2DEFAULTTABLESPACEUSERS3QUOTA50MONUSERS4PASSWORDEXPIRE;用户已创建。第15页13.2.4修改用户用户创建后,可以更改用户的属性,如口令、默认表空间、临时表空间、表空间配额、概要文件和用户状态等。但不允许修改用户的名称,除非将其删除。修改数据库用户使用ALTERUSER语句来实现,ALTERUSER语句的语法格式为:ALTERUSERuser_name[IDENTIFIED][BYPASSWORD|EXTERNALLY|GOLBALLYAS‘external_name’][DEFAULTTABLESPACEtablespace_name][TEMPORARYTABLESPACEtemp_tempspace_name][QUOTAnK|M|UNLIMITEDONtablespace_name][PROFILEprofile_name][DEFAULTROLErole_list|ALL[EXCEPTrole_list]|NONE][PASSWORDEXPIRE][ACCOUNTLOCK|UNLOCK];第16页对其中的参数说明如下。lrole_list:角色列表lALL:表示所有角色lEXCEPTrole_list:表示除了role_list列表中角色以外的其他角色。lNONE:表示没有默认角色。【例13-2】修改用户atea的默认表空间为USERS,在该表空间的配额为100MB,在USERS表空间的配额为30MB。命令如下:SQLALTERUSERatea2DEFAULTTABLESPACEUSERS3QUOTA30MONUSERS;第17页13.2.5删除用户当一个用户不再使用时,可以将其删除。删除用户的语法:DROPUSERuser_name[CASCADE]执行该语句的用户必须具有DROPUSER的系统权限。删除用户时需要注意如下几点:(1)如果用户方案中包括任何对象,在删除用户时,必须加上CASCADE短语,Oracle数据库会先删除该用户的所有对象,然后再删除该用户。(2)如果用户当前正与Oracle服务器连接,则不能删除。【例13-3】删除用户atea。SQLDROPUSERatea;--如果atea用户的方案中没有对象SQLDROPUSERateaCASCADE;--如果atea用户的方案中有对象第18页13.2.6查询用户信息如果要获取用户信息,可以通过查询数据字典视图或动态性能视图来实现。ALL_USERS:包含数据库所有用户的用户名、用户ID和用户创建时间。DBA_USERS:包含数据库所有用户的详细信息。USER_USERS:包含当前用户的详细信息。DBA_TS_QUOTAS:包含所有用户的表空间配额信息。USER_TS_QUOTAS:包含当前用户的表空间配额信息。V$SESSION:包含用户会话信息。V$OPEN_CURSOR:包含用户执行的SQL语句信息。【例13-4】查找所有用户的默认表空间。(查找的结果应该截图,显示在下面)SQLSELECTuser_name,default_tablespace2FROMdba_users;第19页主要内容13.1概述13.2用户管理13.3权限管理13.4角色管理13.5数据库审计13.6小结13.7习题第20页在用户创建完成后,仅仅表示该用户在Oracle系统中进行了注册而已,这样的用户既不能连接到数据库,更谈不上进行查询、建表等操作。要使该用户能够连接到Oracle系统并能使用Oracle的资源,如查询表的数据,创建自己的表结构等,必须由具有DBA角色的用户对该用户进行授权。第21页13.3.1权限概述权限是指执行特定类型的SQL语句或访问另一个用户的对象的权利,例如:连接到数据库,创建表,查询其他用户的表,调用其他用户的存储过程等。Oracle数据库使用权限来控制用户对数据的访问和用户所能执行的操作。用户在数据库中可以执行什么样的操作,以及可以对哪些对象进行操作,完全取决于该用户所拥有的权限。根据系统管理方式的不同,在Oracle数据库中将权限分为两大类,系统权限和对象权限。系统权限指数据库级别执行某些操作的权限,即用户执行某一特定的数据库操作或某类数