ASM实例可以通过设置磁盘组的属性access_control.enabled来控制客户端对ASM file的访问。
下面带大家来看下,该属性配置后的效果,测试环境是oracle linux+12cR1 RAC
access_control.enabled属性默认为false,可以通过下面sql查看,这里以DATA磁盘组为例子:
col dg_name for a15
col attr_name for a30
col attr_vlue for a15
select a.name dg_name,b.name attr_name,value attr_vlue
from v$asm_diskgroup a,v$asm_attribute b
where a.group_number=b.group_number
and a.name='DATA'
and b.name='access_control.enabled';
DG_NAME ATTR_NAME ATTR_VLUE
--------------- ------------------------------ ---------------
DATA access_control.enabled FALSE
和access_control.enabled相依赖的属性是access_control.umask,该属性只有在access_control.enabled设置为true
时,设置才有效。该属性控制着asm文件的访问权限。该属性是3个数字的组合 {0|2|6} {0|2|6} {0|2|6},
默认是066,表示只有创建文件的用户有读写操作的权限,操作系统用户组和其他用户没有读写权限。
1、以sysasm权限登录asm实例,更改磁盘组属性,并查看新建asm文件的属性
SQL> ALTER DISKGROUP DATA SET ATTRIBUTE 'access_control.enabled' = 'true';
Diskgroup altered.
--属性已经更改
DG_NAME ATTR_NAME ATTR_VLUE
--------------- ------------------------------ ---------------
DATA access_control.enabled true
--查看当前磁盘组中asm文件的权限
ASMCMD> ls --permission
User Group Permission Name
--省略部分内容
rw-rw-rw- control01.ctl => +DATA/CDB/CONTROLFILE/Current.261.906393975
--在该磁盘组下,创建新的asm文件,这里指的是数据文件
SQL> create tablespace test datafile '+DATA/cdb/test01.dbf' size 10m;
表空间已创建。
--再次查看当前磁盘组中asm文件的权限
ASMCMD> ls --permission
User Group Permission Name
--省略部分内容
rw-rw-rw- control01.ctl => +DATA/CDB/CONTROLFILE/Current.261.906393975
oracle rw------- test01.dbf => +DATA/CDB/DATAFILE/TEST.274.908465523
==》对比属性更改前后,用户显示出来了,权限控制是066.
2、关于用户组和文件权限控制
--查看asm user
SQL> SELECT group_number, os_name FROM V$ASM_USER;
GROUP_NUMBER OS_NAME
------------ ----------
2 oracle
2 grid
--添加asm user group
SQL> ALTER DISKGROUP DATA ADD USERGROUP 'test' WITH MEMBER 'oracle';
Diskgroup altered.
--针对asm文件设置group的信息
SQL> ALTER DISKGROUP DATA SET OWNERSHIP OWNER='oracle', GROUP='test' FOR FILE '+DATA/CDB/test01.dbf';
Diskgroup altered.
ASMCMD> ls --permission
User Group Permission Name
--省略部分内容
rw-rw-rw- control01.ctl => +DATA/CDB/CONTROLFILE/Current.261.906393975
oracle test rw------- test01.dbf => +DATA/CDB/DATAFILE/TEST.274.908465523
--针对asm 文件设置权限
SQL> ALTER DISKGROUP DATA SET PERMISSION OWNER=NONE, GROUP=NONE, OTHER=none FOR FILE '+DATA/CDB/test01.dbf';
Diskgroup altered.
ASMCMD> ls --permission
--省略部分
rw-rw-rw- control01.ctl => +DATA/CDB/CONTROLFILE/Current.261.906393975
oracle test --------- test01.dbf => +DATA/CDB/DATAFILE/TEST.274.9084655233
==》asm文件的权限被设置为666。
SQL> create table test (id number) tablespace test;
表已创建
SQL> insert into test values (1);
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from test;
ID
----------
1
==》虽然asm文件的权限被设置为666,但是客户端数据依然能够插入。和一开始设想,认为数据插入不进去有点出入。
--测试表空间脱机和联机
SQL> alter tablespace test offline;
表空间已更改。
SQL> alter tablespace test online;
alter tablespace test online
*
第 1 行出现错误:
ORA-01157: 无法标识/锁定数据文件 25 - 请参阅 DBWR 跟踪文件 ORA-01110:
数据文件 25: '+DATA/cdb/test01.dbf'
==》这里报错了,猜测可能涉及到文件头数据更改时,针对当前用户的文件权限的控制才生效。
--将read write权限赋予oracle用户
SQL> ALTER DISKGROUP DATA SET PERMISSION OWNER=read write, GROUP=NONE, OTHER=NONE FOR FILE '+DATA/CDB/test01.dbf';
iskgroup altered.
SQL> alter tablespace test online;
表空间已更改。
--将access_control.umask属性设置为'666'
SQL> ALTER DISKGROUP DATA SET ATTRIBUTE 'access_control.umask' = '666';
Diskgroup altered.
--创建表空间,直接报错
SQL> create tablespace test1 datafile '+DATA/cdb/test02.dbf' size 10m;
create tablespace test1 datafile '+DATA/cdb/test02.dbf' size 10m
*
第 1 行出现错误:
ORA-01157: 无法标识/锁定数据文件 27 - 请参阅 DBWR 跟踪文件 ORA-01110:
数据文件 27: '+DATA/cdb/test02.dbf'
总结:
1、access_control.enabled磁盘组属性控制asm文件的权限,存在多个oracle软件版本时,作用才能体现。即只存在一个oracle版本时,设置该参数,个人认为没有什么意义。
2、针对当前用户的文件权限的控制,这里以数据文件为例。即使权限被设置为666,数据依然能够插入和访问。
end !
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25923810/viewspace-2076446/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25923810/viewspace-2076446/