读书笔记
从11gR2开始,Oracle推荐使用不同的操作系统用户安装GI和数据库软件,例如,使用grid安装GI,使用Oracle安装数据库软件,当然,用户还是可以使用Oracle用户安装GI和数据库软件,同时从11gR2版本开始,ASM作为GI的一部分安装,ASM软件是负责创建和管理磁盘组的,Oracle数据库软件需要访问保存在ASM磁盘组上面的数据文件和其他文件,现在这两部分软件是使用不同的操作系统用户进行安装的,所以就出现了新问题:如何设置grid用户权限,作为磁盘组的管理者,它应该拥有最高权限;如何设置Oracle用户权限,使它能够正常访问磁盘组。
Oracle解决办法就是创建不同操作系统用户组和使用粘着位(stick bit)。首先,看一下11gR2版本中与GI和数据库相关操作的操作系统用户组的功能。
[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这个组。
接下来,看一下GI主目录下面下和数据库软件目录下Oracle可执行文件的权限设置。
查看ASM磁盘的权限
[root@RAC1 ~]# ls -l /dev/raw/raw*
crw-rw---- 1 grid asmadmin 162, 1 Sep 5 10:19 /dev/raw/raw1
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可执行文件的权限和所属组。
正常情况下:
[root@RAC1 ~]# ls -l /u01/app/oracle/product/11.2.0/db_1/bin/oracle
-rwsr-s--x. 1 oracle asmadmin 239626689 Jul 20 13:57 /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-x--x. 1 oracle asmadmin 239626689 Jul 20 13:57 /u01/app/oracle/product/11.2.0/db_1/bin/oracle
运行脚本过后:
[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. 1 oracle asmadmin 239626689 Jul 20 13
检查角色任务分离(Job Role Separation)设置是否正确一般要检查以下配置:
关于特殊权限位请参考另外一篇博客:Linux 特殊权限位setuid setgid