When I tried to modify a ACL attribute of a resource, it failed with CRS-4228 like this:
[root@primary01 ~]# crsctl modify resource ora.orclcdb.db -attr "ACL=owner:oracle:rwx,pgrp:oinstall:r--,other::r--,group:dba:r-x,group:oper:r-x,group:racdba:r-x,user:grid:rwx" -unsupported
CRS-4228: Value of attribute 'pgrp:oinstall:r--' is missing
CRS-4000: Command Modify failed, or completed with errors.
CRS-4228 means that Oracle found there're multiple attributes to be modified when we issue crsctl modify resource, but there's no other value to be set. As we can see, there's only one attribute ACL to be set. Is there any misunderstanding?
This is because the value string we want to set contains commas (,) which is the separator of attributes.
To solve CRS-4228, we should try to escape commas and make the value string as a whole. But how to wrap the string? We need some clues.
Coincidentally, Oracle does mention how to deal with values containing commas in command crsctl modify resource section:
If an attribute value for an attribute name-value pair contains commas, then the value must be enclosed in single quotation marks ('').
So we should use an extra pair of single quotation mark to wrap the string value as the documentation said.
[root@primary01 ~]# crsctl modify resource ora.orclcdb.db -attr "ACL='owner:oracle:rwx,pgrp:oinstall:r--,other::r--,group:dba:r-x,group:oper:r-x,group:racdba:r-x,user:grid:rwx'" -unsupported
We solved it.