您好,欢迎访问三七文档
数据库安全设计指南当今人们对计算机网络的依赖程度不断增长,计算机网络在许多领域得到广泛应用。现今几乎所有机构都拥有自己的计算机网络,使信息和资源得以充分共享和利用。随着计算机网络的发展,众多问题也日趋显现。其中安全隐患问题日益突出,计算机网络与应用的安全成为各个组织机构在建设计算机系统时首要考虑因素。本文适用于产品设计人员和开发人员、安全评估人员师、架构设计人员等。1.为默认用户添加密码管理数据库安装之后的默认用户没有激活用户密码管理,需要修改相应用户或者角色的配置文件。【示例】使用ALTERUSER用户名PROFILEdefault修改配置文件。在SQLPLUS下执行如下语句可以更改默认配置文件的内容。ALTERPROFILEdefaultLIMITFAILED_LOGIN_ATTEMPTSUNLIMITED;PASSWORD_LIFE_TIMEUNLIMITED;PASSWORD_REUSE_MAX10PASSWORD_REUSE_TIME30PASSWORD_LOCK_TIME1PASSWORD_GRACE_TIME7;其中FAILED_LOGIN_ATTEMPTS表示允许登录失败次数,PASSWORD_LIFE_TIME表示密码多少天过期,PASSWORD_REUSE_MAX表示密码重用次数,PASSWORD_REUSE_TIME表示多少天之后密码可以重使用,PASSWORD_LOCK_TIME表示密码锁住之后多少天自动解锁,PASSWORD_GRACE_TIME表示在密码多少天后快要过期前给出提示信息。对于LIMITFAILED_LOGIN_ATTEMPTS和PASSWORD_LIFE_TIME有两种配置,一种是设置这两个值为unlimited,这样应用程序不需要再修改密码,一种是设置某一个具体的值,这样比较安装,但要增加维护工作量,因为需要定期修改密码。Oracle安装之后默认用户包括:ANONYMOUS、APEX_PUBLIC_USER、BI、CTXSYS、DBSNMP、DIP、DMSYS、EXFSYS、FLOWS_03000、FLOWS_FILES、HR、IX、LBACSYS、MDDATA、MDSYS、MGMT_VIEW、OE、OLAPSYS、ORACLE_OCM、ORDPLUGINS、ORDSYS、OUTLN、OWBSYS、PM、SCOTT、SH、SI_INFORMTN_SCHEMA、SPATIAL_CSW_ADMIN_USR、SPATIAL_WFS_ADMIN_USR、SYS、SYSMAN、SYSTEM、TSMSYS、WK_TEST、WKPROXY、WKSYS、WMSYS、XDB、XS$NULL2.修改Sys密码和System密码SYS为数据库最高权限用户,System是有默认DBA权限的用户。SYS和SYSTEM也是带有默认密码的默认用户,由于它们的敏感性所以最好显式修改密码【示例】周期性地显式修改密码为强健的密码,如一个月修改一次,参考如何审核弱密码一条。要修改密码,可以在SQLPLUS中执行如下语句:SQLalterusersysidentifiedby新密码;3.回收PUBLIC组对视图ALL_USERS的查询权限ALL_USERS等以ALL_开头的视图是一个像DBA_USERS一样的视图,它可以给任何人使用,因为PUBLIC组对它有查询权限。这个视图可以显示用户名,而用户名是在密码加密算法中是对密码加密的种子。【示例】在SQLPLUS中执行下列语句:SQLrevokeselectonall_usersfrompublic;收回权限后还应该对低权限用户进行测试以确保他们的确不能查看用户名,这是因为权限可能从另一个路径继承下来。【说明】all_users视图包括的字段如下:SQLdescdba_usersNameNull?Type-------------------------------------------------------------USERNAMENOTNULLVARCHAR2(30)USER_IDNOTNULLNUMBERPASSWORDVARCHAR2(30)ACCOUNT_STATUSNOTNULLVARCHAR2(32)LOCK_DATEDATEEXPIRY_DATEDATEDEFAULT_TABLESPACENOTNULLVARCHAR2(30)TEMPORARY_TABLESPACENOTNULLVARCHAR2(30)CREATEDNOTNULLDATEPROFILENOTNULLVARCHAR2(30)INITIAL_RSRC_CONSUMER_GROUPVARCHAR2(30)EXTERNAL_NAMEVARCHAR2(4000)PASSWORD_VERSIONSVARCHAR2(8)EDITIONS_ENABLEDVARCHAR2(1)4.检查非DBA用户对涉及用户角色权限的视图的访问以DBA开头的视图只应该被DBA用户访问,回收非DBA用户对它们的访问权限,另外还有几个视图记录有用户角色权限的视图也不应被非DBA访问。DBA_ROLES','DBA_SYS_PRIVS','DBA_ROLE_PRIVS','DBA_USERS','ROLE_ROLE_PRIVS','USER_TAB_PRIVS','USER_ROLE_PRIVS【示例】在SQLPLUS下执行如下语句:SQLselectgrantee,privilege,table_namefromuser_tab_privswheretable_namein('DBA_ROLES','DBA_SYS_PRIVS','DBA_ROLE_PRIVS','DBA_USERS','ROLE_ROLE_PRIVS','USER_TAB_PRIVS','USER_ROLE_PRIVS');测试结果如下:PUBLICSELECTROLE_ROLE_PRIVSPUBLICSELECTUSER_ROLE_PRIVSPUBLICSELECTUSER_TAB_PRIVSSELECT_CATALOG_ROLESELECTDBA_ROLESSELECT_CATALOG_ROLESELECTDBA_ROLE_PRIVSSELECT_CATALOG_ROLESELECTDBA_SYS_PRIVSSELECT_CATALOG_ROLESELECTDBA_USERSCTXSYSSELECTDBA_ROLESCTXSYSSELECTDBA_ROLE_PRIVSCTXSYSSELECTDBA_SYS_PRIVSCTXSYSSELECTDBA_USERSWKSYSSELECTDBA_ROLE_PRIVS针对上面查询的结果中显示有非DBA用户对这些表有访问权限,则根据执行一系列的sql语句来回收权限,示例如下SQLrevokeselecton视图名from用户(角色)名;如针对第一行,则执行:SQLrevokeselectonrole_role_privsfrompublic;5.检查被授予DBA角色的用户DBA权限很大所以不应该被广泛使用,检查拥有它的用户【示例】在SQLPLUS中执行下列语句:SQLselectgranteefromdba_role_privswheregranted_role='DBA';对于不应该授予此角色的用户回收,使用下列语句收回角色授予:SQLrevokedbafrom用户名;6.回收用户所有包含ANY关键词的权限避免使用ANY权限因为它并不必需,可以为用户分配对特定对象的访问权限。【示例】selectgrantee,privilegefromdba_sys_privswhereprivilegelike'%ANY%';然后执行权限回收语句:revokeprivilegefromgrantee;其中的privilege和grantee是从上面语句的执行结果中得出的。7.回收不必要的CREATELIBRARY和CREATEPROCEDURE权限授予“CREATELIBRARY”权限可以被用来访问操作系统或者用来提升权限,如可以用C语言写一个访问操作系统资源的dll或so文件,createlibrary可以调用这些dll或so文件。如果不是特别需要应该避免授予此权限【示例】selectgrantee,privilegefromdba_sys_privswhereprivilege='CREATELIBRARY';selectgrantee,privilegefromdba_sys_privswhereprivilege='CREATEPROCEDURE';回收非DBA用户拥有的CREATELIBRARY权限和CREATEPROCEDURE权限。8.回收应用程序用户的RESOURCE角色RESOURCE角色有UNLIMITEDTABLESPACE这样不必要的权限,这有可能导致DOS攻击,就算显式为已经授予RESOURCE角色的用户分配空间限额也不起作用,因为UNLIMITEDTABLESPACE会覆盖这些【描述】。【示例】点击查看每个用户所授予的角色,回收所有已经授予RESOURCE角色的应用程序用户的RESOURCE角色。9.为每个用户分配合适的表空间限额为了防止用户占用过多空间而可能有意无意地导致DOS攻击,应该为每个用户设置空间限额以限制表大小。【示例】下面这个语句可以检查没有设置空间限额的用户:(selectnamefromsys.user$)minus(selectusernamefromdba_ts_quotas);为这些用户设置空间限额,使用如下命令可以修改用户空间限额:alteruser用户名quota限额大小:整数on表空间名;10.在数据库中封装PL/SQL代码封装可以对程序包的源代码编码。特别是当源代码包含私有代码时更应该进行封装。进行封装的一个好的理由是我们可以隐藏源代码。【示例】在操作系统中使用如下命令行:wrapiname=infileoname=outfile;11.确保在应用程序表空间中不存在不属于本应用程序的对象如前面所说的道理,如果在一个表空间或者方案中存在不属于方案属主的对象,则可能导致拒绝服务攻击,特别是当这些对象是属于一些特权用户时。【示例】可用如下语句检查:selectowner,segment_name,segment_typefromdba_segmentswheretablespace_name='appowner';上面的SQL可以看出appowner表空间上的方案属主及对象和类型。
本文标题:数据库安全设计指南
链接地址:https://www.777doc.com/doc-4552886 .html