分类目录归档:oracle

多台ORACLE数据库表空间监控方案

一,设计背景


 

由于所在公司ORACLE数据库较多,传统人工监控表空间的方式较耗时,且无法记录历史表空间数据,无法判断每日表空间增长量,在没有gridcontrol/cloudcontrol软件的情况下,笔者设计如下表空间监控方案,大家也可以根据自己的实际情况对下面的方案进行修改。

二,设计思路


 

oracle

通过dblink将来查询到的表空间数据集中汇总到一张表里通过crontab跑定时任务从各台服务器获取表空间使用情况信息。

三,具体实施步骤


 

1.所在oracle数据库ip地址信息(下面为举例说明具体情况要根据所在环境设置)

hostname 备注 ipaddress tnsname instancename
tbsmonitor 监控数据库 10.1.21.1 tbsmonitor tbsmonitor
database1 被监控数据库 10.1.21.2 database1 database1
database2 被监控数据库 10.1.21.3 database2 database2
database3 被监控数据库 10.1.21.4 database3 database3

2.在tbsmonitor主机上创建tbsmonitor表空间

3.在tbsmonitor和database1/database2/database3上建立tbsmonitor用户用来做表空间监控。

4.为了tbsmonitor用户赋权用来查找表空间使用情况。

5.在tbsmonitor上建立database1/ database2/ database3的tnsnames.ora连接,在tnsnames.ora文件中加入

6.修改/etc/hosts文件,如果有dns服务器的话可以略过

7.在tbsmonitor主机设置dblink,这样就能通过dblink从被监控服务器远程抽取表空间信息。

8.建立tbsmonitor表,表空间统计数据将插入这张表。

9. 在crontab中运行每日0点1分更新数据库表空间信息的脚本tbsmonitor.sh(我根据业务需要每日统计一次,大家也可以通过业务要求修改统计频率)

 

11.创建插入脚本(拿database1举例,以此类推)

Sql脚本如下

12.查看表空间使用占比可以使用如下语句(如果要查看某台机器可以带上条件where ipaddress=’xxxx’ and instance=’xxxxx’ and to_char(time,’yyyy-mm-dd’)=’xxxx-xx-xx’)

13.查看每日增量可以使用如下脚本。(下面显示的是4-8日10.1.21.2表空间增长的情况)

四,改进方向


 

本方案适合有一定oracle基础的读者,今后的改进方向是通过python进行开发对dba所需要的表空间数据数据文件数据等信息进行图形化的展示,并实现添加删除数据文件,表空间大小超过阈值告警等功能。

本文原创,转载请注明出处、作者

如有错误,欢迎指正

邮箱15980219172@139.com

搭建oracleRAC详解(裸设备)

 

理清思路先

 

设备,一个笔记本,两台redhat5的虚拟机(32bit),两个虚拟机都安装过oracle,配置好一些安装的必要条件了,需要的包官网下。

 

1。选择2台主机,同平台的,保证网络互通

2。设计和配置ip地址,每台主机3个ip,配置2个,预留一个

私有IP:在独立的网段,双机内部通信     10.10.10.1

公有IP:维护的IP,在工作网段                            192.168.1.11

虚IP:一定和公有IP在相同的网段,在crs启动后由oracle管理          192.168.1.101

3。时间同步和双机对等关系(AB互相执行脚本,登录无缝)

4。配置iscsi存储,2个100m的,一个2g的

5。安装crs,验证:crs_stat -t

6。安装数据库的软件

7。建立并行的集群asm实例,dbca

8。建立磁盘组

9。建立集群数据库,在asm磁盘组

10。管理维护rac,配置网络,备份,恢复,建立表空间

 

 

 

1。2。配置网络

两台虚拟机,rac1  rac2

rac1:

rac1.ting.com

私有IP:10.10.58.1

公有IP:192.168.58.1

/etc/hosts

10.10.58.1        rac1

10.10.58.2        rac2

192.168.58.1   rac1-priv

192.168.58.2   rac2-priv

192.168.58.100        rac1-vip

192.168.58.200        rac2-vip

rac2:

rac2.ting.com

私有IP:10.10.58.2

公有IP:192.168.58.2

/etc/hosts

10.10.58.1        rac1

10.10.58.2        rac2

192.168.58.1   rac1-priv

192.168.58.2   rac2-priv

192.168.58.100        rac1-vip

192.168.58.200        rac2-vip

3。时间同步

rac1,rac2   打开time-stream服务     /etc/xinet.d/time-stream

rac2

crontab -e

*/1 * * * * rdate -s 10.10.58.1

建立等效用户

rac1:

groupadd oinstall

groupadd dba

useradd -G oinstall -g dba oracle

passwd oracle

rac2:

groupadd oinstall

groupadd dba

useradd -G oinstall -g dba oracle

passwd oracle

双机对等

rac1:

su – oracle

[oracle@rac1 ~]$ mkdir ~/.ssh

[oracle@rac1 ~]$ chmod 700 ~/.ssh

[oracle@rac1 ~]$ ssh-keygen -t rsa

[oracle@rac1 ~]$ ssh-keygen -t dsa

rac2:

su – oracle

[oracle@rac2 ~]$ mkdir ~/.ssh

[oracle@rac2 ~]$ chmod 700 ~/.ssh

[oracle@rac2 ~]$ ssh-keygen -t rsa

[oracle@rac2 ~]$ ssh-keygen -t dsa

切换回 rac1,接着执行:

[oracle@raw1 ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

[oracle@raw1 ~]$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

提示:下列命令会提示你输入 rac2 的 oracle 密码,按照提示输入即可,如果

失败可重新尝试执行命令。

Rac1 节点:

[oracle@rac1 ~]$ scp ~/.ssh/authorized_keys rac2:~/.ssh/authorized_keys

Rac2 节点:

[oracle@rac2 ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

[oracle@rac2 ~]$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

[oracle@rac2 ~]$  scp ~/.ssh/authorized_keys rac1:~/.ssh/authorized_keys

4) 确保 2 个 node 都有相互的结点信息。两机相互执行。

[oracle@rac1 ~]$ ssh rac1 date

[oracle@rac1~]$ ssh rac2 date

[oracle@rac1 ~]$ ssh rac1-priv date

[oracle@rac1 ~]$ ssh rac2-priv date

切换至 rac2 执行

[oracle@rac2 ~]$ ssh rac1 date

[oracle@rac2~]$ ssh rac2 date

[oracle@rac2 ~]$ ssh rac1-priv date

[oracle@rac2 ~]$ ssh rac2-priv date

配置 hangcheck-timer 模块,2 个节点都要执行Hangcheck-timer 是 Linux 提供的一个内核级的 IO-Fencing 模块, 这个模块会监控 Linux 内核运行状态, 如果长时间挂起,

这个模块会自动重启系统。 这个模块在 Linux 内核空间运行, 不会受系统负载的影响。 这个模块会使用 CPU 的 Time Stamp Counter(TSC) 寄存器,这个寄存器的值会在每个时钟

周期自动增加, 因此使用的是硬件时间,所以精度更高。    配置这个模块需要 2 个参数: hangcheck_tick 和 hangcheck_margin。 hangcheck_tick 用于定义多长时间检查一次,缺省值是 30 秒。

有可能内核本身很忙, 导致这个检查被推迟, 该模块还允许定义一个延迟上限,就是 hangcheck_margin, 它的缺省值是 180 秒。    Hangcheck-timer 模块会根据 hangcheck_tick 的设置,

定时检查内核。只要 2 次检查的时间间隔小于 hangcheck_tick + hangchec_margin, 都会认为内核运行正常,否则就意味着运行异常,这个模块会自动重启系统。CRS 本身还有一个 MissCount 参数,

可以通过 crsctl get css miscount 命令查看。

当 RAC 结点间的心跳信息丢失时, Clusterware 必须确保在进行重构时,故障结点确实是 Dead 状态,否则结点仅是临时负载过高导致心跳丢失,然后其他结点开始重构,但是结点没有重启,

这样会损坏数据库。 因此 MissCount 必须大于 hangcheck_tick+hangcheck_margin 的和。

 

1) 查看模块位置:

[root@rac1 ~]#  find /lib/modules -name “hangcheck-timer.ko”

/lib/modules/2.6.18-164.el5/kernel/drivers/char/hangcheck-timer.ko

/lib/modules/2.6.18-164.el5xen/kernel/drivers/char/hangcheck-timer.ko

2) 配置系统启动时自动加载模块,在/etc/rc.d/rc.local 中添加如下内容

[root@rac1 ~]# modprobe hangcheck-timer

[root@rac1 ~]# vi /etc/rc.d/rc.local

modprobe hangcheck-timer

3) 配置 hangcheck-timer 参数, 在/etc/modprobe.conf 中添加如下内容:

[root@rac1 ~]# vi /etc/modprobe.conf

options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180

4) 确认模块加载成功:

[root@rac1 ~]# grep Hangcheck /var/log/messages | tail -2

Sep  7 19:53:03 rac1 kernel: Hangcheck: starting hangcheck timer 0.9.

0 (tick is 180 seconds, margin is 60 seconds).

Sep  7 19:53:03 rac1 kernel: Hangcheck: Using monotonic_clock().

 

 

4。配置iscsi

 

用本机作存储:

192.168.58.58

2个100m的,一个2g的

 

本机target端:

yum install scsi-target-utils

vim /etc/tgt/targets.conf

<target iqn.20111215.com.ting:server.sda5>

backing-store /dev/sda5

vendor_id sda5

product_id disk1_100m

</target>

<target iqn.20111215.com.ting:server.sda6>

backing-store /dev/sda6

vendor_id sda6

product_id disk2_100m

</target>

<target iqn.20111215.com.ting:server.sda7>

backing-store /dev/sda7

vendor_id sda7

product_id disk3_2G

</target>

 

服务:

chkconfig tgtd on

/etc/init.d/tgtd start

tgtadm –lld iscsi –mode target –op show                并写入rc.local中

 

rac1:

yum install iscsi-initiator-utils

chkconfig iscsid on

chkconfig iscsi on

/etc/init.d/iscsid start

iscsiadm -m discovery -t st -p 192.168.58.58

/etc/init.d/iscsi start

fdisk -l                —> 发现设备

vim /etc/udev/scripts/iscsidev.sh

—————————————-

#!/bin/bash

BUS=${1}

HOST=${BUS%%:*}

[ -e /sys/class/iscsi_host ] || exit 1

file=”/sys/class/iscsi_host/host${HOST}/device/session*/iscsi_session*/targetname”

target_name=$(cat ${file})

if [ -z “${target_name}” ] ; then

exit 1

fi

echo “${target_name##*:}”

—————————————-

 

chmod +x /etc/udev/scripts/iscsidev.sh

 

vi /etc/udev/rules.d/55-openiscsi.rules  –服务器和客户端的该文件内容要一致!

———————————————–

KERNEL==”sd*”,BUS==”scsi”,PROGRAM=”/etc/udev/scripts/iscsidev.sh %b”,SYMLINK+=”iscsi/%c”

 

 

rac2:

yum install iscsi-initiator-utils

chkconfig iscsid on

chkconfig iscsi on

/etc/init.d/iscsid start

iscsiadm -m discovery -t st -p 192.168.58.58

/etc/init.d/iscsi start

fdisk -l                —> 发现设备

vim /etc/udev/scripts/iscsidev.sh

—————————————-

#!/bin/bash

BUS=${1}

HOST=${BUS%%:*}

[ -e /sys/class/iscsi_host ] || exit 1

file=”/sys/class/iscsi_host/host${HOST}/device/session*/iscsi_session*/targetname”

target_name=$(cat ${file})

if [ -z “${target_name}” ] ; then

exit 1

fi

echo “${target_name##*:}”

—————————————-

 

chmod +x /etc/udev/scripts/iscsidev.sh

 

vi /etc/udev/rules.d/55-openiscsi.rules  –服务器和客户端的该文件内容要一致!

———————————————–

KERNEL==”sd*”,BUS==”scsi”,PROGRAM=”/etc/udev/scripts/iscsidev.sh %b”,SYMLINK+=”iscsi/%c”

 

 

rac1:

分区:sdb1 sdc1 sdd1

partprobe /dev/sdb  /dev/sdc  /dev/sdd

vi /etc/udev/rules.d/60-raw.rules

ACTION==”add”, KERNEL==”sdb1″, RUN+=”/bin/raw /dev/raw/raw1 %N”

ACTION==”add”, KERNEL==”sdc1″, RUN+=”/bin/raw /dev/raw/raw2 %N”

ACTION==”add”, KERNEL==”sdd”, RUN+=”/bin/raw /dev/raw/raw3 %N”                                —->  指定的是大的

KERNEL==”raw[1]”, MODE=”0660″, GROUP=”oinstall”, OWNER=”oracle”

KERNEL==”raw[2]”, MODE=”0660″, GROUP=”oinstall”, OWNER=”oracle”

KERNEL==”raw[3]”, MODE=”0660″, GROUP=”oinstall”, OWNER=”oracle”

start_udev

ls /dev/raw/              —> 有raw1,2,3

rac2:

分区:sdb1 sdc1 sdd1

partprobe /dev/sdb  /dev/sdc  /dev/sdd                                          —–>  rac1执行后,rac2也要执行

vi /etc/udev/rules.d/60-raw.rules

ACTION==”add”, KERNEL==”sdb”, RUN+=”/bin/raw /dev/raw/raw1 %N”

ACTION==”add”, KERNEL==”sdd”, RUN+=”/bin/raw /dev/raw/raw2 %N”

ACTION==”add”, KERNEL==”sdc”, RUN+=”/bin/raw /dev/raw/raw3 %N”

KERNEL==”raw[1]”, MODE=”0660″, GROUP=”oinstall”, OWNER=”oracle”

KERNEL==”raw[2]”, MODE=”0660″, GROUP=”oinstall”, OWNER=”oracle”

KERNEL==”raw[3]”, MODE=”0660″, GROUP=”oinstall”, OWNER=”oracle”

start_udev

ls /dev/raw/              —> 有raw1,2,3

 

 

注意:解决节点无法关机

 

target端:

vim /etc/tgt/targets.conf

<target iqn.20111216.com.ting:server.sda5>

backing-store /dev/sda5

vendor_id  sda5

write-cache off

</target>

 

强制关:

tgt-admin –update ALL –force

 

 

 

设置环境变量:

rac1:

mkdir -p /u01/app/oracle

chown -R oracle:oinstall /u01

chmod -R 777 /u01

vim /etc/sysctl.conf

net.core.rmem_default = 262144

net.core.wmem_default = 262144

net.core.rmem_max = 262144

net.core.wmem_max = 262144

kernel.shmall = 131072000

kernel.shmmax = 544288000 -官网提供的 524288000. 这个值小了。检查时通不过

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

fs.file-max = 65536

net.ipv4.ip_local_port_range = 1024 65000

sysctl -p

设置用户资源限制,2 个节点都要执行

vi /etc/sysconfig/limits.conf

oracle soft memlock 5242880

oracle hard memlock 524280

oracle soft nproc 2047

oracle hard nproc 16384

oracle soft nofile 65536

oracle hard nofile 65536

将下面一行添加到/etc/pam.d/login 文件中:

session required /lib/security/pam_limits.so

在每个 node 上配置 Oracle 的 profile 文件

vim .bash_profile

export PATH

unset USERNAME

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db

export ORA_CRS_HOME=$ORACLE_BASE/product/crs

export NLS_LANG=AMERICAN_AMERICA.UTF8

export ORACLE_SID=rac1

export ORACLE_TERM=xterm

export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data

export PATH=$CRS_HOME/bin:$ORACLE_HOME/bin:$PATH

 

 

 

 

软件包检查

for i in binutils compat-gcc-34 compat-libstdc++-296 control-center \

gcc gcc-c++ glibc glibc-common glibc-devel libaio libgcc \

libstdc++ libstdc++-devel libXp make openmotif22 setarch

do

rpm -q $i &>/dev/null || F=”$F $i”

done ;echo $F;unset F

 

rac2:

mkdir -p /u01/app/oracle

chown -R oracle:oinstall /u01

chmod -R 777 /u01

vim /etc/sysctl.conf

net.core.rmem_default = 262144

net.core.wmem_default = 262144

net.core.rmem_max = 262144

net.core.wmem_max = 262144

kernel.shmall = 131072000

kernel.shmmax = 544288000 -官网提供的 524288000. 这个值小了。检查时通不过

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

fs.file-max = 65536

net.ipv4.ip_local_port_range = 1024 65000

sysctl -p

设置用户资源限制,2 个节点都要执行

vi /etc/sysconfig/limits.conf

oracle soft memlock 5242880

oracle hard memlock 524280

oracle soft nproc 2047

oracle hard nproc 16384

oracle soft nofile 65536

oracle hard nofile 65536

将下面一行添加到/etc/pam.d/login 文件中:

session required /lib/security/pam_limits.so

在每个 node 上配置 Oracle 的 profile 文件

vim .bash_profile

export PATH

unset USERNAME

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db

export ORA_CRS_HOME=$ORACLE_BASE/product/crs

export NLS_LANG=AMERICAN_AMERICA.UTF8

export ORACLE_SID=rac2

export ORACLE_TERM=xterm

export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data

export PATH=$CRS_HOME/bin:$ORACLE_HOME/bin:$PATH

 

 

软件包检查

for i in binutils compat-gcc-34 compat-libstdc++-296 control-center \

gcc gcc-c++ glibc glibc-common glibc-devel libaio libgcc \

libstdc++ libstdc++-devel libXp make openmotif22 setarch

do

rpm -q $i &>/dev/null || F=”$F $i”

done ;echo $F;unset F

 

 

5。安装crs,验证:crs_stat -t

使用CVU校验集群安装可行性:(要在两个节点上都通过)

 

1>

rac1作验证:

su – oracle

/home/oracle/clusterware/cluvfy/runcluvfy.sh stage -pre crsinst -n rac1,rac2 -verbose

 

如果报错如下:

执行 群集服务设置 的预检查

 

正在检查节点的可访问性…

rac1.ting.com: rac1.ting.com

 

检查: 节点 “null” 的节点可访问性

目标节点                                  是否可访问?

————————————  ————————

rac2                                  否

rac1                                  否

结果:节点 “null” 的节点可访问性检查失败。

 

 

ERROR:

无法访问任何节点。

验证无法继续。

 

在所有节点上预检查 群集服务设置 失败。

 

修改:hostname 和 /etc/hosts中主机名一致

 

找相对应的不通过原因修正

 

同样rac2也作验证:

 

2>

rac1:

/home/oracle/clusterware/runInstaller.sh

注意:修改程序安装路径db_1 ==> crs_1

如果:报错缺少模块就安装模块

界面显示不正常,安装:ttfonts-zh_CN-2.14-6.noarch

图形安装:添加     rac2   添加裸设备

 

提示要执行脚本时:

先更改:

/home/oracle/oracle/product/10.2.0/crs/bin/vipca

在123行 fi 后新添加一行:

unset LD_ASSUME_KERNEL

/home/oracle/oracle/product/10.2.0/crs/bin/srvctl

在export LD_ASSUME_KERNEL这一行后加

unset LD_ASSUME_KERNEL

执行:提示的两个脚本:

/home/oracle/oraInventory/orainstRoot.sh

/home/oracle/oracle/product/10.2.0/crs/root.sh

 

在最后一个节点运行root.sh如果出现下面错误,请按下面蓝色字体部分解决!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Running vipca(silent) for configuring nodeapps

Error 0(Native: listNetInterfaces:[3])

[Error 0(Native: listNetInterfaces:[3])]

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

以上纯属自己按文档搭建的,可能中间可能会遇到我没有碰到的问题,希望多多提提哦~~~~

Linux下自动备份Oracle数据库

说明:

Oracle数据库服务器

操作系统:CentOS

IP:192.168.0.198

端口:1521

SID:orcl

Oracle数据库版本:Oracle11gR2

具体操作:

1、root用户登录服务器

mkdir -p /backup/oracledata  #新建Oracle数据库备份目录

chown -R  oracle:oinstall /backup/oracledata -R #设置目录权限为oinstall用户组的oracle用户(用户oracle与用户组oinstall是在安装Oracle数据库时设置的)

2、新建Oracle数据库备份脚本

vi /backup/oracledata/ordatabak.sh  #新建文件,输入以下代码

#!/bin/sh

export ORACLE_BASE=/data/oracle

export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1

export ORACLE_SID=orcl

export ORACLE_TERM=xterm

export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

export LANG=C

export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

#以上代码为Oracle数据库运行账号oracle的系统环境变量设置,必须添加,否则crontab任务计划不能执行。

# oracle用户的系统环境变量路径:/home/oracle/.bash_profile

date=date +%Y_%m_%d   #获取系统当前日期时间

days=7  #设置删除7天之前的备份文件

orsid=192.168.0.198:1521/orcl  #Oracle数据库服务器IP、端口、SID

orowner=OSYUNWEI  #备份此用户下面的数据

bakuser=OSYUNWEI  #用此用户来执行备份,必须要有备份操作的权限

bakpass=OSYUNWEI  #执行备注的用户密码

bakdir=/backup/oracledata  #备份文件路径,需要提前创建好

bakdata=$orowner”_”$date.dmp #备份数据库名称

baklog=$orowner”_”$date.log #备份执行时候生成的日志文件名称

ordatabak=$orowner”_”$date.tar.gz #最后保存的Oracle数据库备份文件

cd $bakdir #进入备份目录

mkdir -p $orowner #按需要备份的Oracle用户创建目录

cd $orowner #进入目录

exp $bakuser/$bakpass@$orsid grants=y owner=$orowner file=$bakdir/$orowner/$bakdata log=$bakdir/$orowner/$baklog #执行备份

tar -zcvf $ordatabak $bakdata  $baklog  #压缩备份文件和日志文件

find $bakdir/$orowner  -type f -name “*.log” -exec rm {} \; #删除备份文件

find $bakdir/$orowner  -type f -name “*.dmp” -exec rm {} \; #删除日志文件

find $bakdir/$orowner  -type f -name “*.tar.gz” -mtime +$days -exec rm -rf {} \;  #删除7天前的备份(注意:{} \中间有空格)

:wq #保存退出

chmod +x /backup/oracledata/ordatabak.sh   #添加脚本执行权限

3、vi /etc/crontab  #编辑系统任务计划,添加以下代码到最后一行

30 2 * * * oracle  /backup/oracledata/ordatabak.sh  #每天凌晨2点30分,以oracle用户执行ordatabak.sh备份文件

:wq! #保存退出

service crond restart #重启crond

每天凌晨2点30分,会自动备份数据库到/backup/oracledata/OSYUNWEI目录中,保存为.tar.gz压缩文件,并且删除7天前的备份,即只保留最近7天的数据。

备注:以上所有的代码都是在英文半角状态下输入。

至此,Linux下自动备份Oracle数据库并删除指定天数前的备份教程完成。

转自:Linux下自动备份Oracle数据库并删除指定天数前的备份

运维安全 Oracle安全配置指南

0x01 测试环境

操作系统:window server 2008 x64 oracle:oracle 11.2.0.1.0

0x02 oracle权限介绍

  1. oracle一个实例就是一个数据库,创建一个新的数据库会产生一个新的实例,并且一个实例独立运行一个进程。
  2. 一个用户对应一个方案,当用户新建一个数据对象(比如表)之后会在此方案下面。自己访问可以直接访问,其他用户访问需通过“方案名.对象名”的方式。
  3. 用户默认拥有自己方案下面的数据对象的权限,其他用户无相应权限。sys,system默认拥有所有方案的权限。
  4. 当一个用户登录oracle实例时,首先需要判断用户是有否登录权限,如果没有,直接不能登录,如果有,则登录成功。登录成功之后,会根据用户拥有的权限来决定能做的事情,在进行一项操作时,如果有权限,则操作成功,如果没有权限,则操作失败。
  5. oracle主要有两个核心进程,一个是oracle的服务进程,一个是监听进程,当外部连接oracle时,首先是访问的监听进程,由监听进程根据你访问的数据库实例来转发到相应的oracle实例进程处理。

0x03 oracle系统服务

在window server 2008中安装的oracle 11g总共会有七个服务,这七个服务的含义分别为:

a. Oracle ORCL VSS Writer Service:

Oracle卷映射拷贝写入服务,VSS(Volume Shadow Copy Service)能够让存储基础设备(比如磁盘,阵列等)创建高保真的时间点映像,即映射拷贝(shadow copy)。它可以在多卷或者单个卷上创建映射拷贝,同时不会影响到系统的系统能。(非必须启动)

b. OracleDBConsoleorcl:

Oracle数据库控制台服务,orcl是Oracle的实例标识,默认的实例为orcl。在运行Enterprise Manager(企业管理器OEM)的时候,需要启动这个服务。(非必须启动)

c. OracleJobSchedulerORCL:

Oracle作业调度(定时器)服务,ORCL是Oracle实例标识。(非必须启动)

d. OracleMTSRecoveryService:

服务端控制。该服务允许数据库充当一个微软事务服务器MTS、COM/COM+对象和分布式环境下的事务的资源管理器。(非必须启动)

e. OracleOraDb11g_home1ClrAgent:

Oracle数据库.NET扩展服务的一部分。 (非必须启动)

f. OracleOraDb11g_home1TNSListener:

监听器服务,服务只有在数据库需要远程访问的时候才需要。(非必须启动,但是供外部访问则必须启动)。

g. OracleServiceORCL:

数据库服务(数据库实例),是Oracle核心服务该服务,是数据库启动的基础, 只有该服务启动,Oracle数据库才能正常启动。(必须启动)

那么在开发的时候到底需要启动哪些服务呢?

对新手来说,要是只用Oracle自带的sql*plus的话,只要启动OracleServiceORCL即可,要是使用PL/SQL Developer等第三方工具的话,OracleOraDb11g_home1TNSListener服务也要开启。OracleDBConsoleorcl是进入基于web的EM必须开启的,其余服务很少用。

0x04 oracle默认账户

在oracle11g安装后,会有很多系统默认账号,除了4个外,其他的都处于锁定状态,如无特殊用途,请不要打开。另外4个分别为:

  1. SYS用户 SYS,当创建一个数据库时,SYS用户将被默认创建并授予DBA角色,所有数据库数据字典中的基本表和视图都存储在名为SYS的方案中,这些基本表和视图对于Oracle数据库的操作是非常重要的。为了维护数据字典的真实性,SYS方案中的表只能由系统来维护,他们不能被任何用户或数据库管理员修改,而且任何用户不能在SYS方案中创建表。
  2. SYSTEM用户 SYSTEM,与SYS一样,在创建Oracle数据库时,SYSTEM用户被默认创建并被授予DBA角色,用于创建显示管理信息的表或视图,以及被各种Oracle数据库应用和工具使用的内容表 或视图。
  3. DBSNMP用户 DBSNMP是Oracle数据库中用于智能代理(Intelligent Agent)的用户,用来监控和管理数据库相关性能的用户,如果停止该用户,则无法提取相关的数据信息。
  4. SYSMAN用户 SYSMAN是Oracle数据库中用于EM管理的用户,如果你不用该用户,也可以删除或者锁定。

以上4个账户的密码均为安装时候设置的密码,由于一般情况下,DBSNMP和SYSMAN用户不会被使用而被遗漏,建议锁定。

0x05 oracle权限和角色

a.权限

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

b. 角色

oracle角色分为系统角色和自定义角色,自定义角色可以根据需要指定相应的权限,系统角色主要介绍下面3个:

DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。

RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。

CONNECT:拥有Connect权限的用户只可以登录,不可以创建实体和数据库结构。

对于普通用户:授予connect, resource角色。

对于DBA管理用户:授予connect,resource, dba角色。

0x06 oracle如何建立网站连接用户

方案一:

  1. 使用system新建一个用户名,给予connect,resource 的角色
  2. 使用新建的用户登录,然后创建需要的表
  3. 使用system登录,revoke新建用户的connect,resource角色
  4. 使用system登录,grant新建用户create session 权限
  5. 使用system登录,给予新建用户在USERS表空间的权限

方案二:

  1. 使用system登录,创建网站需要的表
  2. 使用system登录,创建一个用户名
  3. 使用system登录,grant新建用户create session的系统权限,然后根据网站的需要给予所建表的相应的对象权限。
  4. 使用system登录,给予新建用户在USERS表空间的权限
  5. 网站访问数据库的时候使用“system.表名”的形式。

0x07 oracle安全配置方案

1.  限制访问ip

方法一:

防火墙指定,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,……)

  1. 修改端口 可以修改监听器的端口,减少扫描量
  2. 关闭不必要的服务 可以关闭不必要的服务来减少对外访问,除了OracleServiceORCL和OracleOraDb11g_home1TNSListener是必须开启的之外,其他的均可以关闭。特别是OracleDBConsoleorcl服务的开启会启用web版的EM,访问端口在1158,如不需要请关闭此服务。
  3. 所有的用户均需设置强密码 在设置密码的时候均需要设置8位以上的强密码,且包含大小写,数字,特殊字符。
  4. 关闭不需要的用户 oracle默认会有4个不锁定的账户,建议锁定DBSNMP和SYSMAN。
  5. 特权账户的处理 限制数据库超级管理员远程登录。 a. 在spfile中设置 REMOTE_LOGIN_PASSWORDFILE=NONE b.在sqlnet.ora中设置 SQLNET.AUTHENTICATION_SERVICES=NONE 禁用SYSDBA角色的自动登录
  6. 开启日志 可以开启日志对数据库进行审计,但是也会消耗资源,可根据实际情况操作。
  7. 网站使用的数据库账号权限最小化 可以根据上面写的网站连接数据库账户推荐的方案建立。
  8. 合理使用数据库进程账户 数据库进程账户使用较低权限账户,新建一个新用户,添加数据目录的写权限,如果配置之后跑不起来,可以退而求其次,给予整个数据库目录的完全控制权限。
  9. 合理配置数据库进程账户对磁盘的权限 不要给予数据库目录以外的特殊权限,最好是读取权限都不给,可以根据实际情况来安排,原则就是数据库目录给的权限能保证正常运行,其他的目录能不给就不给。

0x08 oracle提权及防御点

1.  通过PL/SQL提权

2.  使用java提权

以上两种方法如果使用sys均可以提权成功,而普通权限用户是无法完成上面的操作的。所以防御源头还是只能对sys特权账户的管理,但是如果真的特权账户被黑客获取,此时的方法也只有使用低权限的数据库进程账户,以及控制进程账户对磁盘的权限,这样操作能将黑客能够操作的权限降到最低。 至于先对低权限的oracle账户提升为dba权限,然后进行系统提权的操作本文不讨论,也请大牛提供更好的方法。

0x09 oracle常见操作命令

1.  连接数据库

2.  新建用户

3.  给用户授权

4.  取消授权

5.  删除锁定(解锁)账号

转自:http://drops.wooyun.org/%E8%BF%90%E7%BB%B4%E5%AE%89%E5%85%A8/2547

centos6 下安装 Oracle 11g

配置VNC Server

配置VNC server

验证VNC

oracle

oracle

安装Oracle

依赖包

Oracle依赖太多的包,具体的可以参见下Oracle安装文档。我们可以通过Oracle的yum仓库来解决这些依赖关系。

下载Oracle公开yum文件

RHEL/CentOs 6.x

RHEL/CentOs 5.x

RHEL/CentOs 4.x

安装必需的包:

设置环境变量

开始安装

oracle

oracle

oracle

oracle

oracle

oracle

oracle

oracle

oracle

 

 

大部分是过时的包,可以忽略掉。不过有个包pdksh要安装。show succeeded看看这些包有没安装。

oracle

保存Response File, 静默安装时候有用。

oracle

oracle

oracle

oracle

设置SYS用户密码

oracle

运行下面的脚本

oracle

oracle

oracle

web界面

oracle

 

至此Oracle 11g安装完成。