1、普通高等教育 “十二五”国家级规划教材,清华大学出版社,http:/,Oracle11g,数据库技术,孟德欣 主编许勇 谢二莲 贺师君 副主编,第7章 安全管理,7.1 用户管理7.2 权限管理7.3 角色管理7.4 概要文件管理7.5 审计,7.1 用户管理,7.1.1 创建用户创建用户的命令是CREATE USER,其基本语法如下:CREATE USER 用户名IDENTIFIED BY 口令 | EXTERNALLY | GLOBALLY AS 外部名DEFAULT TABLESPACE 默认表空间名称| TEMPORARY TABLESPACE 临时表空间名称| QUOTA 数目 K
2、| M UNLIMITED ON 表空间名称| PROFILE 用户配置文件| PASSWORD EXPIRE| ACCOUNT LOCK | UNLOCK 其中,用户名指用户账号名称。IDENTIFIED关键字指定用户的认证方式,创建用户必须得到认证。,7.1.1 创建用户,用户的认证方式见下表: 如采用口令认证,则Oracle采用数据库来控制用户账号和所有验证,不需要依赖数据库以外的安全措施来验证。如果采用外部认证,则由操作系统来验证,用户无需输入口令就可以登录Oracle。如果采用全局认证,则Oracle允许采用基于LDAP(轻量目录访问协议)的目录服务进行验证,此时用户可以在目录中定义
3、和管理,在整个企业信息化平台中具有统一标识,并能访问多个数据库。,7.1.1 创建用户,下面的语句创建了一个用户。SQLCREATE USER LOTUS PROFILE DEFAULT IDENTIFIED BY LOTUS DEFAULT TABLESPACE USERS QUOTA 10 K ON USERSACCOUNT UNLOCK;GRANT CONNECT TO LOTUS;GRANT DBA TO LOTUS;其中,上面语句中的GRANT子句用来对LOTUS用户授予权限。在Oracle企业管理器里创建用户账号,则在Database Control界面的管理选项卡上的用户和权限中
4、选择“用户” 界面。,7.1.2 修改用户,数据库管理员可对Oracle用户进行修改,包括更改用户的概要文件、更改口令、更改用户的默认表空间及临时表空间、锁定/解锁用户、更改限额等。修改用户的SQL命令是ALTER USER语句,其语法与CREATE USER基本相同,下面列举一些的修改操作。SQLALTER USER lotus PROFILE profile1;SQLALTER USER lotus IDENTIFIED BY lotus123;SQLALTER USER lotus DEFAULT TABLESPACE xxgcx;SQLALTER USER lotus TEMPORAR
5、Y TABLESPACE temp2SQLALTER USER lotus ACCOUNT LOCK;SQLALTER USER lotus ACCOUNT UNLOCK;SQLALTER USER lotus QUOTA unlimited ON users;,7.1.3 删除用户,删除用户的SQL命令是DROP USER语句,上述删除用户相对应的SQL语句如下:SQLDROP USER LOTUS;用户已删除。注意,在使用DROP USER 命令删除用户时,如果没有指定CASCADE子句,同时该用户拥有自己的Oracle对象,将提示出错信息,指定CASCADE子句后,将删除该用户拥有的所用
6、对象。另外,不能删除当前正在使用数据库的用户。在Oracle企业管理器中删除用户时,选中要删除的用户,单击【删除】按钮,在随后出现的确认界面中单击【是】按钮,就可以完成用户的删除工作。,7.1.4 有关用户的数据字典,7.2 权限管理,权限指用户对数据库进行操作的能力,如果不对新建的用户赋予一定的权限,该用户是不能对数据库进行操作的。Oracle权限分为系统权限和对象权限两种,系统权限指在Oracle数据库系统中执行某项操作的能力,对象权限指在特定数据库对象上执行某项操作的能力。Oracle系统通过授予和撤销权限,实现对数据库系统安全的访问控制。,7.2.1 系统权限,Oracle提供了众多的
7、系统权限,每一种系统权限指明用户进行某一种或某类特定的数据库操作。系统权限中带有ANY关键字的指明该权限的范围为数据库中的所有方案。如下面的部分系统权限。,7.2.2 对象权限,对象权限指在特定数据库对象上执行某项操作的能力,指在Oracle对象上能够执行的操作,如查询、插入、修改、删除、执行等。这里的Oracle对象包括表、视图、聚簇、索引、序列、快照、过程、函数、包等。不同的对象具有不同对象权限,如表具有插入的权限,而序列却没有,而序列具有的执行权限,而表却没有。,7.2.3 授予和撤销系统权限,在创建用户后,如果没有为用户授予相应的权限,则用户是不能对数据库进行操作的,甚至不能登录到数据
8、库上。所以必须为用户授予一定的系统权限。在SQL命令中,授予权限使用GRANT语句,撤销权限使用REVOKE语句。,7.2.3 授予和撤销系统权限,1授予系统权限授予系统权限的基本语法如下:GRANT 系统权限列表|角色 TO 用户名|角色|PUBLICWITH ADMIN OPTION其中,public指授予所有用户,with admin option选项将使得该用户有将其权限再授予其他用户的能力。下面授予LOTUS用户具有建立表、建立视图、建立索引的权限。SQLgrant create table ,create view,create index to lotus;下面授予LOTUS用户
9、具有建立表的系统权限,同时允许LOTUS用户管理建立表的系统权限。SQLgrant create table to lotus with admin option;下面授予数据库中的所有用户使用无限表空间的权限。SQLgrant unlimited tablespace to public;,7.2.3 授予和撤销系统权限,2撤销系统权限撤销系统权限的数据库用户不必是最初授予系统权限的用户,任何具有ADMIN OPTION权限的数据库用户都可以撤销其他用户的系统权限。另外,在撤销系统权限时,经过使用WITH ADMIN OPTION选项而获得系统权限的用户不受影响。撤销系统权限的基本语法如下:
10、REVOKE 系统权限列表|角色 FROM 用户名|角色|PUBLIC下面撤销LOTUS用户的具有建立表、视图、索引权限。SQLREVOKE create table ,create view,create index FROM lotus;下面撤销数据库中的所有用户使用无限表空间的权限。SQLrevoke unlimited tablespace from PUBLIC;,7.2.4 授予和撤销对象权限,1授予对象权限对象权限由该对象的拥有者为其他用户授权,非对象的拥有者不能将对象权限授予其他用户,即使是数据库管理员也不能为其他用户所属的对象授权。授予对象权限的语法如下:GRANT 对象权限
11、列表|ALL ON 模式名.数据库对象TO 用户名|角色|PUBLICWITH ADMIN OPTION下面授予LOTUS用户具有查询、修改、删除STUDENT表的对象权限。SQLGRANT select ,update,delete ON student TO lotus;下面授予LOTUS用户具有对STUDENT表所有的操作权限,并且可以把获得的对象权限再授予其他用户。SQLGRANT ALL ON student TO lotus WITH ADMIN OPTION;,7.2.4 授予和撤销对象权限,2撤销对象权限撤销对象权限的基本语法如下:REVOKE 对象权限列表|ALL ON 模式
12、名.数据库对象FROM 用户名|角色|PUBLICCASCADE CONSTRAINTSFORCE其中,CASCADE CONSTRAINTS选项将会导致用REFERENCES权限定义的相关的完整性约束被删除,FORCE选项将废除用户定义的对象类型的EXECUTE权限被删除,并撤销依赖于这些对象类型的表格。下面撤销LOTUS用户在STUDENT表上的查询、修改、删除权限。SQLREVOKE create ,update,delete ON student FROM lotus;下面撤销LOTUS用户对STUDENT表所有的操作权限。SQLREVOKE ALL ON student FROM l
13、otus;,7.2.5 有关权限的数据字典,如查看Lotus用户所拥有的系统权限、对象权限。SQL SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE=LOTUS;SQL SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE=LOTUS;,7.3 角色管理,角色是对权限的集中管理机制。每个角色都有一个给定的名称,它是一组系统权限和对象权限的集合,当把某角色授予某个用户,该用户就会自动获得该角色包括的所有权限。使用角色将使得授予和撤销权限都比较方便,通过对一个角色添加或删除权限,从而可以改变被授予该角色的用户组的权限。当需要修改用户的
14、权限时,只需对角色进行修改,不必对单个用户进行修改。角色一旦创建成功后归Oracle系统所有,Oracle系统自动把该角色及其管理权授予创建该角色的用户,以便修改和删除该角色,或将该角色授予其他用户或角色。角色还可以授予另一个角色,则另一个角色将继承此角色拥有的所有权限。角色分为系统预定义角色和用户自定义角色。,7.3.1 预定义角色,预定义角色就是安装Oracle数据库后,由系统自动创建的一些角色。这些角色已经被授予了一些权限。,7.3.2 创建自定义角色,创建角色的是CREATE ROLE语句,其基本语法如下:CREATE ROLE 角色名 NOT IDENTIFIED| IDENTIFI
15、ED BY 口令| EXTREMELY|GLOBALLY其中,角色名不能与数据库中的用户名相同。NOT IDENTIFIED选项指定无需认证就可以使用该角色。IDENTIFIED 指定角色的认证方式。在OEM中,选择“管理”-用户和权限角色 界面。,7.3.3 为角色授予和撤销权限,Oracle系统通过对授予和撤销一个角色的权限,从而改变用户的被授予权限。当需要修改用户的权限时,只需对角色进行修改,不必对单个用户进行修改。1、为角色授予权限角色创建成功后,为了使用角色,还必须向角色授予一定的权限,然后就可以将角色授予用户或其他角色。向角色授予权限也用到GRANT 语句,其基本语法如下:GRAN
16、T 权限名 | 已有角色名 TO 角色名 WITH ADMIN OPTION其中,权限名和已有角色名是要授予的权限列表,如果要授予的是对象权限,还需得到对象拥有者的授权。角色名是要被授予的角色列表。,7.3.3 为角色授予和撤销权限,下面的一组语句用来向LOTUS_ROLE角色授予权限。SQLGRANT ALTER ANY TABLE TO LOTUS_ROLE WITH ADMIN OPTION;SQLGRANT CREATE ANY TABLE TO LOTUS_ROLE WITH ADMIN OPTION;SQLGRANT DELETE ANY TABLE TO LOTUS_ROLE W
17、ITH ADMIN OPTION;SQLGRANT INSERT ANY TABLE TO LOTUS_ROLE WITH ADMIN OPTION;这样,LOTUS_ROLE角色被创建后就拥有了建立、插入、修改、删除表的系统权限,而且还可以把所获得的权限再授予其他用户或角色。,7.3.3 为角色授予和撤销权限,2、为角色撤销权限从角色中撤销权限使用REVOKE语句,基本语法如下:REVOKE权限名 | 已有角色名 FROM 角色名 其中,如果要撤销的是对象权限,还需得到对象拥有者的授权。下面的语句撤销LOTUS角色的CREATE SESSION权限。SQLREVOKE CREATE SESS
18、ION FROM LOTUS_ROLE;下面的语句撤销LOTUS角色的HR方案下的JOBS表的查询权限。SQLREVOKE SELECT ON HR.JOBS FROM LOTUS_ROLE;下面的语句修改LOTUS_ROLE角色,去掉口令验证。SQLALTER ROLE LOTUS_ROLE NOT IDENTIFIED;,7.3.4 将角色授予用户和其他角色,在角色创建好并为角色分配了适当的权限之后,就可以将角色授予其他用户或角色,基本语法如下: GRANT 角色名 TO 用户名|角色名|PUBLIC WITH ADMIN OPTION 其中,PUBLIC选项指将角色授予数据库中的所有用户
19、。下面将CONNECT角色授予数据库中的所有用户。SQLGRANT CONNECT TO PUBLIC;下面将RESOURCE角色授予lotus_role角色。SQLGRANT RESOURCE TO lotus_role;下面将lotus_role角色授予LOTUS用户,并允许LOTUS用户可以将lotus_role角色授予其他用户或角色。SQLGRANT lotus_role TO LOTUS WITH ADMIN OPTION;,7.3.5 删除角色,当不再需要角色时,可以删除角色。这样使用该角色的用户的所对应的权限也相应丢失。删除角色使用DROP ROLE语句,基本语法如下:DROP
20、ROLE 角色名下面的语句可以用来删除LOTUS_ROLE角色:SQLDROP ROLE LOTUS_ROLE;,7.3.6 有关角色的数据字典,7.3.6 有关角色的数据字典,查看数据库中的角色列表SQL SELECT ROLE FROM DBA_ROLES;查看DBA角色拥有的角色列表及是否能够将所拥有的角色授予其他用户。SQL SELECT GRANTEE, GRANTED_ROLE, ADMIN_OPTION from DBA_ROLE_PRIVS where GRANTEE=DBA;查看授予EXP_FULL_DATABASE角色系统权限的信息。SQL SELECT * FROM RO
21、LE_SYS_PRIVS WHERE ROLE=EXP_FULL_DATABASE;查看授予IMP_FULL_DATABASE角色对象权限的信息。SQL SELECT ROLE,OWNER,TABLE_NAME FROM ROLE_TAB_PRIVS WHERE ROLE=IMP_FULL_DATABASE;,7.4 概要文件管理,概要文件是一个对用户使用Oracle系统资源进行限制的文件,又称配置文件。概要文件的资源限制将防止用户过度使用数据库系统资源。一个用户不使用概要文件或概要文件参数设置不合理,都会影响其他用户访问数据库的速度。在将概要文件分配给某个用户后,在用户下次访问数据库时,Or
22、acle系统将按照概要文件的设置为该用户分配系统资源。在创建用户时,如果没有显式的指定概要文件,默认分配给用户的是默认概要文件,该文件对系统资源没有任何限制。因此,DBA常常根据实际情况建立自定义概要文件。在数据库中可以创建多个概要文件,然后分配给不同的数据库用户使用。概要文件只能分配为用户使用,而不能分配为角色或其他概要文件使用。,7.4.1 创建概要文件,创建概要文件的语法如下:CREATE PROFILE 概要文件名 LIMIT 资源参数列表|口令参数列表其中,资源参数列表如下:,7.4.1 创建概要文件,密码参数列表如下表:,7.4.1 创建概要文件,下面的语句使用CREATE PRO
23、FILE语句创建一个概要文件。SQLCREATE PROFILE PROFILE1 LIMITCPU_PER_SESSION 10000CPU_PER_CALL 3000CONNECT_TIME 45 SESSIONS_PER_USER 10 LOGICAL_READS_PER_SESSION DEFAULTLOGICAL_READS_PER_CALL 1000 PRIVATE_SGA 256K FAILED_LOGIN_ATTEMPTS 3;,7.4.1 创建概要文件,上述概要文件PROFILE1创建成功后,如果将它分配给一个用户,该用户在会话中将受到以下限制。1)每个会话可用100秒的CP
24、U时间。2)每次调用不能超过30秒的CPU时间。3)每次会话的持续时间不能超过45分钟。4)最多有10个并行会话。5)在每次会话中,读取的数据块受DEFAULT概要文件中相应参数的限制。6)每次调用读取的数据块不能超过1000个。7)每个会话占用的SGA资源不能超过256K。8)用户登录时允许失败3次将被锁定。 在OEM中,选择管理用户和权限-概要文件选项,打开界面后即可以创建。,7.4.2 将概要文件分配给用户,创建完成的概要文件可以分配给用户使用,将概要文件分配给用户的SQL语句如下:ALTER USER 用户名 PROFILE 概要文件名如下面的语句将概要文件PROFILE1分配给LOT
25、US用户:SQLALTER USER LOTUS PROFILE PROFILE1;用户已更改。在OEM中,选择“编辑用户”界面,从“概要文件”下拉列表中选择所要分配的概要文件。,7.4.3 修改和删除概要文件,1、修改概要文件修改概要文件用ALTER PROFILE语句,语法如下:ALTER PROFILE 概要文件名 LIMIT 资源参数列表|口令参数列表如下面的语句修改概要文件PROFILE1,将其中的允许口令登录失败的次数修改为2,口令的重复使用为无限制。SQLALTER PROFILE PROFILE1 LIMIT FAILED_LOGIN_ATTEMPTS 3 PASSWORD_R
26、EUSE_MAX UNLIMITED;,7.4.3 修改和删除概要文件,2、删除概要文件删除概要文件用到DROP PROFILE语句,基本语法如下:DROP PROFILE 概要文件名 CASCADE其中,当所删除的概要文件已经分配给用户使用时,CASCADE选项必须使用。如下面的语句删除已经分配给LOTUS用户的概要文件PROFILE1:SQLDROP PROFILE PROFILE1;此时,Oracle会提示“ORA-02382: 概要文件 PROFILE1 指定了用户, 不能没有 CASCADE 而删除”的错误信息。接着使用CASCADE选项后再次执行。SQLDROP PROFILE P
27、ROFILE1 CASCADE;如果删除还没有分配给用户使用的概要文件可以不用CASCADE选项。,7.4.4 有关概要文件的数据字典,Oracle系统中与概要文件相关的数据字典主要是DBA_PROFILES,其描述了概要文件的详细信息。查看PROFILE1概要文件的详细信息。SQL SELECT PROFILE, RESOURCE_NAME, LIMIT FROM DBA_PROFILES WHERE PROFILE=PROFILE1;,7.5 审计,Oracle的审计机制用于监视和记录用户对数据库所做的各种操作。利用记录在数据库中的审计信息,可以审查可疑的数据库活动,发现非法用户所进行的操
28、作,或者收集数据库使用的统计信息。作为一种安全机制,审计主要记录发生在服务器内部的操作,如登录注册企图、数据库操作等,而不是记录数据的更新值,插入行和删除行中的具体数据。默认情况下审计没有开启。不管你是否打开数据库的审计功能,以下这些操作会被Oracle系统强制记录下来,如使用管理员权限连接实例;启动数据库以及关闭数据库等。,7.5.1 激活审计,在默认情况下,Oracle系统的审计功能是关闭的。激活的办法是设置AUDIT_TRAIL初始化参数。 AUDIT_TRAIL设置为非NONE值时,都将开启审计功能。,7.5.1 激活审计,设置数据库的audit_trail参数。SQL show pa
29、rameter audit_trail;SQL alter system set audit_Trail=true scope=spfile;另外一个跟审计有关的重要参数是audit_sys_operations。此参数用于开启或停用对管理员的审计,默认值为FALSE。如果设置audit_trail为OS,然后设置audit_sys_operations为TRUE,此时Oracle系统会忽略autit_trail参数。审计结果不会写在AUD$表中,在WINDOWS平台上,AUDTI结果会记录在系统的事件查看器中,如果是LINUX/UNIX平台则会记录在audit_file_dest参数指定的物
30、理文件中。,7.5.1 激活审计,下面的语句可以用来对管理员进行审计。SQL SHOW PARAMETER AUDIT_TRAIL;SQL alter system set audit_trail=os scope=spfile;SQL show parameter audit_sys_operations;SQL alter system set audit_sys_operations=true scope=spfile;SQLshutdown immediateSQL conn sys/orcl as sysdbaSQL startupSQL audit all privileges;S
31、QL alter user hr identified by hr123;此时,可以打开WINDOWS系统下的事件查看器,选择其中的“应用程序”项,选择刚产生的事件记录,7.5.2 审计的类型,7.5.3 审计的操作,审计的基本语法如下:AUDIT 语句选项|对象选项 BY SESSION|ACCESS WHENEVER NOT SUCCESSFUL 其中,BY SESSION指在一个会话中对相同类型SQL语句只向审计表记录一次。BY ACCESS 指对于每一个被审计的语句,Oracle系统写入一个审计记录。WHENEVER SUCCESSFUL指定当SQL语句成功执行时才被审计,当有NOT
32、关键字时,只对操作失败的SQL语句进行审计,当省略此选项时,则不管成功或失败都将被审计。语句选项指对SQL语句进行的语句审计,审计记录包括用户完成的操作、操作类型、操作对象和操作时间。,7.5.3 审计的操作,对所有的SQL命令进行审计。SQLAUDIT ALL;对创建、修改、删除和设置角色的语句进行审计,不管其操作是否成功。SQLAUDIT ROLE;对操作成功的创建、修改、删除和设置角色的语句进行审计。SQLAUDIT ROLE WHENEVER SUCCESSFUL;如果对操作失败的创建、修改、删除和设置角色的语句进行审计,则用:SQLAUDIT ROLE WHENEVER NOT SU
33、CCESSFUL;对成功登录的操作进行审计。SQLAUDIT SESSION WHENEVER SUCCESSFUL;,7.5.3 审计的操作,如对登录失败的操作进行审计,则用:SQLAUDIT SESSION WHENEVER NOT SUCCESSFUL;对用户MDX和LOTUS查询和修改表的操作进行审计。SQLAUDIT SELECT TABLE, UPDATE TABLE BY MDX,LOTUS;对DELETE ANY TABLE系统权限进行审计。SQLAUDIT DELETE ANY TABLE;对查询HR.JOBS表的语句进行审计。SQLAUDIT SELECT ON HR.JO
34、BS;对成功执行查询HR.JOBS表的语句进行审计。SQLAUDIT SELECT ON HR.JOBS WHENEVER SUCCESSFUL; 对插入和修改HR.JOBS表的语句进行审计。SQLAUDIT INSERT, UPDATE ON HR.JOBS;,7.5.3 审计的操作,对数据库中新建对象的ALTER、 GRANT、INSERT、UPDATE和DELETE操作,默认设置为审计。SQLAUDIT ALTER,GRANT,INSERT,UPDATE, DELETE ON DEFAULT ;上面语句执行成功后,新建的Oracle对象会自动被审计清除所有审计信息:SQLDELETE F
35、ROM SYS.AUD$;清除指定对象上的审计信息:SQLDELETE FROM SYS.AUD$ WHERE obj$name=JOBS;,7.5.4 停止审计,停止审计使用NOAUDIT语句,其参数与AUDIT语句基本相同。停止所有系统中的审计。SQLNOAUDIT ALL;对创建、修改、删除和设置角色的语句停止审计,不管其操作是否成功。SQLNOAUDIT ROLE ;对登录失败的操作停止审计。SQLNOAUDIT SESSION WHENEVER NOT SUCCESSFUL;对用户MDX和LOTUS查询和修改表的操作停止审计。SQLNOAUDIT SELECT TABLE, UPDA
36、TE TABLE BY MDX, LOTUS ;,7.5.4 停止审计,对DELETE ANY TABLE系统权限停止审计。SQLNOAUDIT DELETE ANY TABLE;对数据库中新建对象的ALTER、 GRANT、INSERT、UPDATE和DELETE操作停止审计。SQLNOAUDIT ALTER, GRANT, INSERT, UPDATE, DELETE ON DEFAULT;,7.5.5 关于审计的示例,下面的语句是一个关于审计的完整实例。1、激活审计C:SQLPLUS / AS SYSDBASQL sHOW PARAMETER AUDITSQL ALTER SYSTEM
37、SET AUDIT_SYS_OPERATIONS=TRUE SCOPE=SPFILE; -审计以SYSDBA/SYSOPER角色的登陆SQL ALTER SYSTEM SET AUDIT_TRAIL=DB SCOPE=SPFILE; SQL STARTUP FORCE;SQL SHOW PARAMETER AUDIT2、开始审计SQL AUDIT ALL ON T_TEST; - T_TEST为表名称SQL CONN TEST/TEXT -TEST为用户名,7.5.5 关于审计的示例,SQL SELECT * FROM T_TEST;SQL INSERT INTO TEST.T_TEST (C
38、2,C5) VALUES (TEST1,2);SQL COMMIT;SQL DELETE FROM TEST.T_TEST;SQL COMMIT;SQL CONN SYS/SZ AS SYSDBASQL COL DEST_NAME FORMAT A30SQL COL OS_USERNAME FORMAT A15SQLSELECT OS_USERNAME,USERNAME,USERHOST,TERMINAL,TIMESTAMP,OWNER,OBJ_NAME,ACTION_NAME,SESSIONID,OS_PROCESS,SQL_TEXT FROM DBA_AUDIT_TRAIL;,7.5.5 关于审计的示例,SQL AUDIT SELECT TABLE BY TEST BY ACCESS;SQL AUDIT DELETE,UPDATE,INSERT ON USER.TABLE BY TEST; -审计test用户对表user.table的delete,update,insert操作3、撤销审计SQL NOAUDIT ALL ON TEST;,7.5.6 有关审计的数据字典,谢谢使用!,