《Oracle Database权限与安全介绍.ppt》由会员分享,可在线阅读,更多相关《Oracle Database权限与安全介绍.ppt(46页珍藏版)》请在三一办公上搜索。
1、Oracle Database权限与安全介绍,赵元杰中程在线(北京)科技有限公司2009.8,2023年2月28日,2/45,内容提要,Oracle 各版本提供安全功能一般的安全问题Public与安全问题触发器-安全捕获方法数据库审计几个安全检查脚本,2023年2月28日,3/45,数据安全问题,外部安全问题:未正确处理坏损和更换的硬盘运输过程中备份介质丢失或被盗内部安全问题:DBA 可以访问应用程序数据,包括财务和人力资源部门的数据擅自访问应用程序和/或数据库合规性问题:Sarbanes-Oxley 和Graham-Leach Bliley 和Basel II 法案要求严格的内部控制和责任分
2、离访问敏感数据的用户、时间、位置和方式?,2023年2月28日,4/45,数据安全问题-不同版本,数据库安全技术在增强:每个版本都不一样,2023年2月28日,5/45,系统权限管理,授予系统权限:Oracle 系统约定好的与Oracle资源有关权限参考原版资料 Oracle database administrator用GRANT授权:GRANT system_privilege|role TO user|role|PUBLIC WITH ADMIN OPTIONWITH ADMIN OPTION表示被授权者可有权再将权限授予另外的用户,2023年2月28日,6/45,系统权限管理,授予系统
3、权限明细:Oracle 系统完整拼写见:参考Oracle Database SQL Reference10g Release 2(10.2)B14200-01 table p18-1 System Privileges撤消系统权限从用户或角色撤消Oracle 系统权限用REVOKE撤消,语法为:REVOKE system_privilege|ALL ON schema.object FROM user|role|PUBLIC CASCADE CONSTRAINTS其中:system_privilege 系统权限或角色,2023年2月28日,7/45,系统权限管理,授予系统权限明细:Adviso
4、r Framework Privileges:,2023年2月28日,8/45,系统权限管理,授予系统权限明细:Cluster:,2023年2月28日,9/45,系统权限管理,授予系统权限明细:TABLE:,2023年2月28日,10/45,内容提要,Oracle 各版本提供安全功能一般安全问题 Public与安全问题触发器-安全捕获方法数据库审计几个安全检查脚本,2023年2月28日,11/45,常见安全问题-口令,常见口令安全问题口令很短,如123456或888888password=usernameSys和SYSTEM 仍然采用默认口令避免口令安全问题认识安全的重要性强行口令安全-使用S
5、YS函数使用PROFILE 进行口令的安全管理,2023年2月28日,12/45,常见安全问题-口令,口令安全问题检查Oracle 系统提供chekpwd 实用程序,C:checkpwdsystem/strongpw66123.34.54.123:1521/ORCL password_list.txtCheckpwd 1.23 Win-(c)2007 byRed-Database-Security GmbHOracle Security Consulting,Security Audits&Security Traininghttp:/www.red-database-MDSYS has we
6、akpasswordMDSYS EXPIRED&LOCKEDORDSYS has weakpasswordORDSYS EXPIRED&LOCKEDDUMMY123 has weakpasswordDUMMY123 OPENDBSNMP OK OPENSCOTT has weakpasswordTIGER OPENCTXSYS has weakpasswordCHANGE_ON_INSTALL EXPIRED&LOCKEDSH has weakpasswordCHANGE_ON_INSTALL EXPIRED&LOCKEDOUTLN has weakpasswordOUTLN EXPIRED&
7、LOCKEDDIP has weakpasswordDIP EXPIRED&LOCKEDDUMMY321 has weakpassword123YMMUD OPEN.SYS OK OPENSYSTEM OK OPENDone.Summary:Passwordschecked:13900828Weakpasswordsfound:23 Elapsedtime(min:sec):0:54Passwords/second:265486,2023年2月28日,13/45,内容提要,Oracle 各版本提供安全功能一般安全问题 Public与安全问题触发器-安全捕获方法数据库审计几个安全检查脚本,202
8、3年2月28日,14/45,Public与安全,Public 与安全Public 虚拟用户,方便授权可能被滥用Public 的危险性Oracle安全清单(Oracle Security Checklist)UTL_TCPUTL_SMTPUTL_MAILUTL_HTTPUTL_INADDR UTL_FILE,2023年2月28日,15/45,Public与安全-包,Oracle 最危险的包:dbms_sql(No.1)utl_fileutl_mailutl_inaddrutl_tcp(No.3)dbms_lobdbms_xmlgen(No.2)dbms_aw_xmlctxsys.drithsxo
9、rdsys.ord_dicomkupp$proc,2023年2月28日,16/45,Public与安全-包,从Oracle 系统中撤销危险的包的权限:SQL revoke execute on utl_httpfrom public force;SQL revoke execute on utl_tcp from public force;SQL revoke execute on utl_filefrom public force;SQL revoke execute on utl_inaddrfrom public force;SQL revoke execute on utl_smtpf
10、rom public force;SQL revoke execute on utl_dbwsfrom public force;SQL revoke execute on dbms_lobfrom public force;SQL revoke execute on dbms_randomfrom public force;SQL revoke execute on dbms_obfuscation_toolkit from public force;,2023年2月28日,17/45,Public与安全-包,从Oracle 系统中撤销危险的包的权限(续):SQL revoke execut
11、e on dbms_crypto_toolkitfrom public force;SQL revoke execute on dbms_advisorfrom public force;SQL revoke execute on dbms_ldapfrom public force;SQL revoke execute on dbms_ldap_utlfrom public force;SQL revoke execute on dbms_jobfrom public force;SQL revoke execute on dbms_scheduler from public force;S
12、QL revoke execute on dbms_ddlfrom public force;SQL revoke execute on dbms_epgfrom public force;SQL revoke execute on dbms_xmlgenfrom public force;SQL revoke execute on dbms_aw_xmlfrom public force;SQL revoke execute on ctxsys.drithsxfrom public force;SQL revoke execute on ordsys.ord_dicomfrom public
13、 force;,2023年2月28日,18/45,Public与安全-DBMS_SQL包,DBMS_SQL包与安全10g及之前版本,借助光标技术可扩大其权限11g 修正了这个不足10g/9i做下面的修正(以sysdba连接):,SQL create role ROLE_DBMSSQL;SQL grant execute on dbms_sql to ROLE_DBMSSQL;SQL spool grantdbmssql.sqlSQL select distinct grant ROLE_DBMS SQL to|owner|;from all_dependencies where referen
14、ced_name=DBMS_SQL and owner not in(PUBLIC);SQL spool offSQL grantdbmssqlSQL revoke execute on dbms_sql from PUBLIC;,2023年2月28日,19/45,Public与安全-取消HTTP请求,HTTP安全一般默认下,运行任何用户使用HTTP请求HTTP可能导致SQL注入攻击(SQL Injection attacks),SQL connect as sysdba;SQL revoke execute on HTTPUriType from public force;,2023年2月2
15、8日,20/45,内容提要,Oracle 各版本提供安全功能一般安全问题 Public与安全问题触发器-安全捕获方法数据库审计几个安全检查脚本,2023年2月28日,21/45,数据库触发器,数据库触发器使用数据库触发器(LOGON,LOGOFF,DDL,GRANT,ERROR,SHUTDOWN,STARTUP)可监控数据库的活动尤其是:动态触发器和错误触发器(DLL trigger and Error trigger),2023年2月28日,22/45,数据库触发器-DDL触发器,DDL 触发器在Sys创建DDL数据库触发器,SQL connect as sysdba;SQL create
16、or replace trigger DDLTriggerAFTER DDL ON DATABASEDECLARErcVARCHAR(4096);BEGIN begin rc:=utl_http.request(http:/192.168.2.201/user=|ora_login_user|;DDL_TYPE=|ora_sysevent|;DDL_OWNER=|ora_dict_obj_owner|;DDL_NAME=|ora_dict_obj_name|;sysdate=|to_char(sysdate,YYYY-MM-DD hh24:mi:ss);exception when utl_h
17、ttp.REQUEST_FAILED then null;end;END;/,2023年2月28日,23/45,数据库触发器-Logon触发器,logon触发器在Sys创建Logon数据库触发器,SQL connect as sysdba;Create or replace trigger sec_logon after logon on databaseDECLARE rc VARCHAR(4096);begin begin rc:=utl_http.request(http:/192.168.2.201/logon_user=|user|;sessionid=|sys_context(US
18、ERENV,SESSIONID)|;host=|sys_context(USERENV,HOST)|;ip=|ora_client_ip_address|;sysdate=|to_char(sysdate,YYYY-MM-DD hh24:mi:ss);-exception when utl_http.REQUEST_FAILED then null;end;End sec_logon;/,2023年2月28日,24/45,数据库触发器-Error触发器,Error触发器这个触发器记录所有错误信息,对于检查攻击等好友用处,CREATE OR REPLACE TRIGGER after_error
19、 AFTER SERVERERROR ON DATABASE DECLARE pragma autonomous_transaction;id NUMBER;sql_text ORA_NAME_LIST_T;v_stmtCLOB;n NUMBER;BEGIN n:=ora_sql_txt(sql_text);IF n=1 THEN FOR i IN 1.n LOOP v_stmt:=v_stmt|sql_text(i);END LOOP;END IF;FOR n IN 1.ora_server_error_depth LOOP IF ora_server_error(n)in(900,906,
20、907,911,917,920,923,933,970,1031,1476,1719,1722,1742,1756,1789,1790,24247,29257,29540)THEN INSERT INTO system.oraerrorVALUES(SYS_GUID(),sysdate,ora_login_user,ora_client_ip_address,ora_server_error(n),ora_server_error_msg(n),v_stmt);END IF;END LOOP;END after_error;/,2023年2月28日,25/45,内容提要,Oracle 各版本提
21、供安全功能一般安全问题 Public与安全问题触发器-安全捕获方法数据库审计几个安全检查脚本,2023年2月28日,26/45,数据库审计,Oracle 系统的审计存在问题可用各种方法迂回(bypassed)感兴趣的语句/对象不被审计有时记录不正确的语句,2023年2月28日,27/45,数据库审计-迂回可逃过,Oracle 系统审计-被迂回问题下面问题在2009年1月已经修正使用在PL/SQL中用dbms_ijob包不留任何痕迹,Declarejj integer:=666666;-job numberbegin sys.dbms_ijob.submit(JOB=jj,LUSER=SYS,P
22、USER=SYS,CUSER=SYS,NEXT_DATE=sysdate,INTERVAL=null,BROKEN=false,WHAT=declarejjinteger:=|jj|;begin execute immediate alter systemarchivelog current;sys.dbms_ijob.remove(jj);deletefromsys.aud$whereobj$name=DBMS_IJOB;commit;end;,sys.dbms_ijob.run(jj);end;/,2023年2月28日,28/45,数据库审计-关键对象不审计,Oracle 系统审计-重要对
23、象不审计SYS下的sys.user$不审计,SQL update sys.user$setpassword=D4DF7931AB130E37 where name=SYSTEM;Thiscannotbeaudited.SQL auditall on sys.user$;auditall on sys.user$ERROR at line1:ORA-00701:object necessary for warmstarting database cannot be altered,2023年2月28日,29/45,数据库审计-关键对象不审计,Oracle 系统审计-重要对象不审计直接修改数据字典
24、 不被审计 创建用户使用特殊的字串不审计,如:“CREATE USER myuseridentified by mypassword”,类似的下面语句也不审计:,SQL create role myuseridentified by mypassword;-convert a role into a userSQL update sys.user$set type#=1 where name=MYUSER;-alternative update,creates an invisible database userSQL update sys.user$set type#=2 where nam
25、e=MYUSER;,2023年2月28日,30/45,数据库审计-启用,Oracle 系统审计 直接在sys下启用审计:,AUDIT CREATE USER BY ACCESS;AUDIT ALTER USER BY ACCESS;AUDIT DROP USER BY ACCESS;AUDIT CREATE ROLE BY ACCESS;AUDIT SELECT ON DBA_USERS BY ACCESS;AUDIT CREATE EXTERNAL JOB BY ACCESS;-10g Rel.2AUDIT CREATE JOB BY ACCESS;-10g Rel.1AUDIT CREAT
26、E ANY JOB BY ACCESS;AUDIT CREATE ANY LIBRARY BY ACCESS;AUDIT ALTER DATABASE BY ACCESS;AUDIT ALTER SYSTEM BY ACCESS;AUDIT AUDITSYSTEM BY ACCESS;AUDIT EXEMPT ACCESS POLICY BY ACCESS;AUDIT GRANT ANY PRIVILEGE BY ACCESS;,2023年2月28日,31/45,数据库审计-启用,Oracle 系统审计 直接在sys下启用审计:,AUDIT GRANT ANY ROLE BY ACCESS;A
27、UDIT ALTER PROFILE BY ACCESS;AUDIT CREATE ANY PROCEDURE BY ACCESS;AUDIT ALTER ANY PROCEDURE BY ACCESS;AUDIT DROP ANY PROCEDURE BY ACCESS;AUDIT CREATE PUBLIC DATABASE LINK BY ACCESS;AUDIT CREATE PUBLIC SYNONYM BY ACCESS;AUDIT EXECUTE ON DBMS_FGA BY ACCESS;AUDIT EXECUTE ON DBMS_RLS BY ACCESS;AUDIT EXE
28、CUTE ON DBMS_FILE_TRANSFER BY ACCESS;AUDIT EXECUTE ON DBMS_SCHEDULER BY ACCESS;AUDIT EXECUTE ON DBMS_JOB BY ACCESS;AUDIT SELECT ON SYS.V_$SQL BY ACCESS;AUDIT SELECT ON SYS.GV_$SQL BY ACCESS;AUDIT EXECUTE ON SYS.KUPP$PROC BY ACCESS;AUDIT EXECUTE ON DBMS_XMLGEN BY ACCESS;AUDIT EXECUTE ON DBMS_NETWORK_
29、ACL_ADMIN BY ACCESS;-11g,2023年2月28日,32/45,数据库安全,脚本1对用户和角色的直接对象授权授权对象权限(Granted Object Privilege)被授权者(Grantee)管理选项(Admin Option(Y/N)数据字典表dba_users dba_tab_privs注:不包含授权给其他的角色,2023年2月28日,33/45,数据库安全,脚本1(sec_obj.sql),select b.owner|.|b.table_name obj,b.privilege what_granted,b.grantable,a.usernamefrom s
30、ys.dba_users a,sys.dba_tab_privs bwherea.username=b.granteeorder by 1,2,3;selectowner|.|table_name obj,privilege what_granted,grantable,grantee from sys.dba_tab_privs wherenot exists(select x from sys.dba_users where username=grantee)order by 1,2,3;,2023年2月28日,34/45,数据库安全,脚本1(输出),Object Granted Priv
31、 Option User Name-SCOTT.BONUS INSERT NO JOE SELECT NO JOE UPDATE NO JOE SYS.A$KSULL SELECT NO SYSTEM SYS.INCEXP ALTER NO SYSTEM DELETE NO SYSTEM Admin Object Granted Priv Option Grantee-SYS.ALL_CATALOG SELECT YES PUBLIC SYS.DBMS_DESCRIBE EXECUTE NO PUBLIC SYS.DUAL SELECT YES PUBLIC SYS.EXU7ANAL SELE
32、CT NO PUBLIC SYS.INCVID DELETE NO EXP_FULL_DATABASE INSERT NO EXP_FULL_DATABASE UPDATE NO EXP_FULL_DATABASE SYS.USER_TAB_PRIVS SELECT YES PUBLIC,2023年2月28日,35/45,数据库安全,脚本 2直接将系统权限授予用户和角色授予的系统权限(Granted System Privilege)用户和角色(Users and Roles)管理选项(Admin Option(Y/N)数据字典表dba_users dba_sys_privs注:不包含授予其他
33、角色,2023年2月28日,36/45,数据库安全,脚本2(sec_priv.sql),select b.privilege what_granted,b.admin_option,a.usernamefrom sys.dba_users a,sys.dba_sys_privs bwherea.username=b.granteeorder by 1,2;select privilege what_granted,admin_option,grantee from sys.dba_sys_privs wherenot exists(select x from sys.dba_users whe
34、re username=grantee)order by 1,2;,2023年2月28日,37/45,数据库安全,脚本2(输出),Granted Privilege Admin User Name-UNLIMITED TABLESPACE NO ATKP NO JOE Granted Privilege Admin Grantee-ALTER ANY PROCEDURE YES DBA ALTER ANY ROLE YES DBA ALTER ANY SEQUENCE YES DBA ALTER SESSION NO CONNECT CREATE SEQUENCE NO CONNECT NO
35、RESOURCE YES DBA CREATE TABLE NO CONNECT NO RESOURCE YES DBA,2023年2月28日,38/45,数据库安全,脚本 3直接将角色授予用户和角色授予角色用户和角色Admin 或 Grant Option(Y/N)数据字典表dba_users dba_role_privs注:不报刊授予其它角色,2023年2月28日,39/45,数据库安全,脚本3(sec_role.sql)-1,select b.granted_role|decode(admin_option,YES,(With Admin Option),null)what_grante
36、d,a.usernamefrom sys.dba_users a,sys.dba_role_privs bwherea.username=b.granteeorder by 1;,2023年2月28日,40/45,数据库安全,脚本3(sec_role.sql)-2,select granted_role|decode(admin_option,YES,(With Admin Option),null)what_granted,granteefrom sys.dba_role_privswherenot exists(select x from sys.dba_users where usern
37、ame=grantee)order by 1;,2023年2月28日,41/45,数据库安全,脚本3(输出的结果),Granted Roles User Name-CONNECT ATKP JOE SCOTT CONNECT(With Admin Option)SYS DBA JOE TUSC DBA(With Admin Option)SYS SYSTEM IOUG(With Admin Option)SYSTEM RESOURCE ATKP JOE RESOURCE(With Admin Option)SYS DBA IOUG EXP_FULL_DATABASE DBA IMP_FULL_
38、DATABASE DBA,2023年2月28日,42/45,数据库安全,脚本4用户授予用户的权限授予角色系统权限对象授权数据字典dba_usersdba_role_privsdba_sys_privsdba_tab_privs用户默认ProfileDefault TablespaceTemporary TablespaceCreate Date,2023年2月28日,43/45,数据库安全,脚本 4(sec_user.sql)-1,select a.username,b.granted_role|decode(admin_option,YES,(With Admin Option),null)
39、what_grantedfrom sys.dba_users a,sys.dba_role_privs bwherea.username=b.granteeUNIONselect a.username,b.privilege|decode(admin_option,YES,(With Admin Option),null)what_grantedfrom sys.dba_users a,sys.dba_sys_privs bwherea.username=b.granteeUNION,2023年2月28日,44/45,数据库安全,脚本4(sec_user.sql)-2,select a.use
40、rname,b.table_name|-|b.privilege|decode(grantable,YES,(With Grant Option),null)what_grantedfrom sys.dba_users a,sys.dba_tab_privs bwherea.username=b.grantee order by 1;selectusername,profile,default_tablespace,temporary_tablespace,createdfrom sys.dba_users order by username;,2023年2月28日,45/45,数据库安全,脚
41、本4(输出)User Name Granted Role or Privilege-JOE BONUS-INSERTJOE BONUS-SELECT JOE BONUS-UPDATE JOE CONNECT JOE DBA JOE RESOURCE JOE UNLIMITED TABLESPACE SYS CHECK_IN-EXECUTE(With Grant Option)SYS CONNECT(With Admin Option)SYS DBA(With Admin Option)User Name Profile Default Tablespace Temporary Tablespa
42、ce Created-JOE DEFAULT SYSTEM SYSTEM 25-APR-97 SYS DEFAULT USER_DATA TEMPORARY_DATA 04-JUL-94 SYSTEM DEFAULT USER_DATA TEMPORARY_DATA 04-JUL-94,2023年2月28日,46/45,链接资源,Oracle Password Checker:http:/www.red-database-Exploit Code for January 2009 CPU::http:/blog.red-database-Security Checklist:http:/SQL Injection Tutorial:http:/blog.red-database-,