读书笔记

 

从11gR2开始,Oracle推荐使用不同的操作系统用户安装GI和数据库软件,例如,使用grid安装GI,使用Oracle安装数据库软件,当然,用户还是可以使用Oracle用户安装GI和数据库软件,同时从11gR2版本开始,ASM作为GI的一部分安装,ASM软件是负责创建和管理磁盘组的,Oracle数据库软件需要访问保存在ASM磁盘组上面的数据文件和其他文件,现在这两部分软件是使用不同的操作系统用户进行安装的,所以就出现了新问题:如何设置grid用户权限,作为磁盘组的管理者,它应该拥有最高权限;如何设置Oracle用户权限,使它能够正常访问磁盘组。

 

Oracle解决办法就是创建不同操作系统用户组和使用粘着位(stick bit)。首先,看一下11gR2版本中与GI和数据库相关操作的操作系统用户组的功能。

  1. oinstall:这个组是GI和数据库软件的拥有者。
  2. dba:这个组是数据库dba组对数据库有最高权限
  3. asmdba:这个组是ASM实例的dba组,可以启动和关闭实例,挂载和卸载ASM磁盘组。
  4. asmadmin:这个组是ASM的管理员组,它包含asmdba的全部权限,同时还可以增加和删除ASM磁盘,磁盘组等。

[root@RAC1 ~]# id oracle

uid=601(oracle) gid=600(oinstall) groups=600(oinstall),602(asmdba),604(dba),605(oper)

 

[root@RAC1 ~]# id grid

uid=600(grid) gid=600(oinstall) groups=600(oinstall),601(asmadmin),602(asmdba),603(asmoper)

 

可以看到Oracle用户不属于asmadmin这个组,grid用户不属于dba这个组。

RAC 安装用户组和权限设置_粘着位

接下来,看一下GI主目录下面下和数据库软件目录下Oracle可执行文件的权限设置。

 

查看ASM磁盘的权限

[root@RAC1 ~]# ls -l /dev/raw/raw*

crw-rw---- 1 grid

crw-rw---- 1 grid asmadmin 162, 2 Sep  5 10:19 /dev/raw/raw2

crw-rw---- 1 grid asmadmin 162, 3 Sep  5 09:51 /dev/raw/raw3

crw-rw---- 1 grid asmadmin 162, 4 Sep  5 10:19 /dev/raw/raw4

crw-rw---- 1 root disk     162, 0 Sep  5 09:51 /dev/raw/rawctl

 

看到这里实际上答案已经很清楚了,首先grid是磁盘的拥有者,所以ASM磁盘拥有者是grid用户,而asmadmin组作为ASM的管理员组,也应该成为磁盘的group,而且磁盘的权限是660。

 

[root@RAC1 ~]# su - grid

[grid@RAC1 ~]$ cd /u01/app/11.2.0/grid/bin/

[grid@RAC1 bin]$ ls -l | grep oracle

-rwsr-s--x. 1 grid oinstall 209914519 Jul 20 12:44 oracle

GI home下的Oracle文件拥有者是grid,这意味着grid用户通过ASM实例管理磁盘或者磁盘组时一定会有读写权限。

 

 

[oracle@RAC1 ~]$ cd /u01/app/oracle/product/11.2.0/db_1/bin/

[oracle@RAC1 bin]$ ls -l | grep oracle

-rwsr-s--x. 1 oracle asmadmin 239626689 Jul 20 13:57 oracle

数据库在访问ASM磁盘时需要通过rdbms_home(也就是数据库软件的主目录)下的oracle文件来实现的,而这个文件的group是asmadmin并带有粘着位,同时asmadmin组是能够对磁盘进行读写操作的,所以Oracle数据库进程就可以对磁盘进行读写操作了。

 

如果rdbms_home下的Oracle可执行文件属组或者权限设定出现了问题可能会造成很多问题。例如无法登入数据库,ora-600错误,访问ASM磁盘组出错。

 

解决办法很简单,可以运行下面命令重新配置Oracle可执行文件的权限和所属组。

<gi_home>/bin/setasmgidwrap  -o  <rdbms_home>/bin/oracle

 

 

正常情况下:

[root@RAC1 ~]# ls -l /u01/app/oracle/product/11.2.0/db_1/bin/oracle

-rwsr-s--x.

修改权限过后:

[root@RAC1 ~]# ls -l /u01/app/oracle/product/11.2.0/db_1/bin/oracle

-rwxr-x--x.

 

运行脚本过后:

[root@RAC1 ~]# /u01/app/11.2.0/grid/bin/setasmgidwrap  -o /u01/app/oracle/product/11.2.0/db_1/bin/oracle

[root@RAC1 ~]# ls -l /u01/app/oracle/product/11.2.0/db_1/bin/oracle

-rwxr-s--x.

 

检查角色任务分离(Job Role Separation)设置是否正确一般要检查以下配置:

  1. 配置1:检查ASM磁盘组的权限,确认属主是grid,group为asmadmin。
  2. 配置2:检测<rdbms_home>/bin/oracle文件权限,确认属组为Oracle用户,group和ASM磁盘的group相同,同时带有粘着位。
  3. 配置3:检查<gi_home>/bin/oracle文件权限,确认属组为grid用户,同时有粘着位设置。

 

关于特殊权限位请参考另外一篇博客:Linux 特殊权限位setuid setgid