GRANT ALL ON object TO PUBLIC文が、DBCよりも低い階層の任意のユーザーによってオブジェクトに対して実行された場合は、GRANTリクエストが実行された後に作成されたユーザーも含めて、すべてのユーザーが、そのオブジェクトに対する権限を継承します。
その後、ユーザーDBCがREVOKE ALL ON object_name FROM DBCを発行した場合、REVOKEリクエストの後に作成されたユーザーには、そのオブジェクトに対する権限が与えられません。ただし、以前に作成されたすべてのユーザーは、REVOKE ALL ON object_name FROM PUBLICが発行されるまで権限を保持します。
例えば、次のようになります。
.LOGON dbc.password CREATE USER sys_admin AS PERM=900000 PASSWORD=sys_admin; GRANT ALL ON sys_admin TO sys_admin WITH GRANT OPTION; .LOGON sys_admin,sys_admin CREATE USER dept AS PERM=500000 PASSWORD=dept; GRANT ALL ON dept TO dept WITH GRANT OPTION; .LOGON DEPT,DEPT CREATE USER user_1 AS PERM=100000 PASSWORD=user_1; .LOGON USER1,USER1 CREATE TABLE table_1 ( column_1 INTEGER, column_2 INTEGER) PRIMARY INDEX(column_1); INSERT table_1(1,2); INSERT table_1(3,4); GRANT ALL ON table_1 TO ALL DBC; .LOGON dept,dept CREATE USER user_2 AS PERM=100000 PASSWORD=user_2; .LOGON user_2,user_2 SELECT * FROM user_1.table_1;
table_1の行が、予想どおりに返されます。
.LOGON dbc,password REVOKE ALL ON user_1.table_1 FROM dbc; .LOGON dept,dept CREATE USER user_3 AS PERM=100000 PASSWORD=user_3; .LOGON user_3,user_3 SELECT * FROM user_1.table_1;
user_3はREVOKEが発行された後に作成されたため、エラーが返されます。
.LOGON user_2,user_2 SELECT * FROM user_1.table_1;
table_1の内容が、予想どおりに返されます。