Hackers,

Over in [1], Joshua proposed a new set of Object Access Type hooks based on 
strings rather than Oids.

His patch was written to be applied atop my patch for granting privileges on 
gucs.

On review of his patch, I became uncomfortable with the complete lack of 
regression test coverage.  To be fair, he did paste a bit of testing logic to 
the thread, but it appears to be based on pgaudit, and it is unclear how to 
include such a test in the core project, where pgaudit is not assumed to be 
installed.

First, I refactored his patch to work against HEAD and not depend on my GUCs 
patch.  Find that as v1-0001.  The refactoring exposed a bit of a problem.  To 
call the new hook for SET and ALTER SYSTEM commands, I need to pass in the Oid 
of a catalog table.  But since my GUC patch isn't applied yet, there isn't any 
such table (pg_setting_acl or whatnot) to pass.  So I'm passing InvalidOid, but 
I don't know if that is right.  In any event, if we want a new API like this, 
we should think a bit harder about whether it can be used to check operations 
where no table Oid is applicable.

Second, I added a new test directory, src/test/modules/test_oat_hooks, which 
includes a new loadable module with hook implementations and a regression test 
for testing the object access hooks.  The main point of the test is to log 
which hooks get called in which order, and which hooks do or do not get called 
when other hooks allow or deny access.  That information shows up in the 
expected output as NOTICE messages.

This second patch has gotten a little long, and I'd like another pair of eyes 
on this before spending a second day on the effort.  Please note that this is a 
quick WIP patch in response to the patch Joshua posted earlier today.  Sorry 
for sometimes missing function comments, etc.  The goal, if this design seems 
acceptable, is to polish this, hopefully with Joshua's assistance, and get it 
committed *before* my GUCs patch, so that my patch can be rebased to use it.  
Otherwise, if this is rejected, I can continue on the GUC patch without this.

(FYI, I got a test failure from src/test/recovery/t/013_crash_restart.pl when 
testing v1-0001.  I'm not sure yet what that is about.)

Attachment: v1-0001-Add-String-object-access-hooks.patch
Description: Binary data

Attachment: v1-0002-Add-regression-tests-of-Object-Access-Type-hooks.patch
Description: Binary data


[1] 
https://www.postgresql.org/message-id/flat/664799.1647456444%40sss.pgh.pa.us#c9721c2da88d59684ac7ac5fc36f09c1

—
Mark Dilger
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company



Reply via email to