Prefix all objects created with cdb_fdw_
Build the DB objects related to a user FDW with the following form: `cdb_fdw_name`. This is aimed at easily inspect and filter them. As requested in code review.
This commit is contained in:
@@ -607,43 +607,43 @@ test_extension|public|"local-table-with-dashes"'
|
||||
}
|
||||
}
|
||||
EOF
|
||||
sql postgres "SELECT cartodb._CDB_SetUp_User_PG_FDW_Server('test_user_fdw', '$ufdw_config');"
|
||||
sql postgres "SELECT cartodb._CDB_SetUp_User_PG_FDW_Server('user_defined_test', '$ufdw_config');"
|
||||
|
||||
# Grant a user access to that FDW, and to grant to others
|
||||
sql postgres "GRANT test_user_fdw TO cdb_testmember_1 WITH ADMIN OPTION;"
|
||||
sql postgres "GRANT cdb_fdw_user_defined_test TO cdb_testmember_1 WITH ADMIN OPTION;"
|
||||
|
||||
# Set up a user foreign table
|
||||
sql cdb_testmember_1 "SELECT cartodb.CDB_SetUp_User_PG_FDW_Table('test_user_fdw', 'test_fdw', 'foo');"
|
||||
sql cdb_testmember_1 "SELECT cartodb.CDB_SetUp_User_PG_FDW_Table('user_defined_test', 'test_fdw', 'foo');"
|
||||
|
||||
# Check that the table can be accessed by the owner/creator
|
||||
sql cdb_testmember_1 "SELECT * from test_user_fdw.foo;"
|
||||
sql cdb_testmember_1 "SELECT a from test_user_fdw.foo LIMIT 1;" should 42
|
||||
sql cdb_testmember_1 "SELECT * from cdb_fdw_user_defined_test.foo;"
|
||||
sql cdb_testmember_1 "SELECT a from cdb_fdw_user_defined_test.foo LIMIT 1;" should 42
|
||||
|
||||
# Check that a role with no permissions cannot use the FDW to access a remote table
|
||||
sql cdb_testmember_2 "IMPORT FOREIGN SCHEMA test_fdw LIMIT TO (foo) FROM SERVER test_user_fdw INTO public" fails
|
||||
sql cdb_testmember_2 "IMPORT FOREIGN SCHEMA test_fdw LIMIT TO (foo) FROM SERVER cdb_fdw_user_defined_test INTO public" fails
|
||||
|
||||
# Check that the table can be accessed by some other user by granting the role
|
||||
sql cdb_testmember_2 "SELECT a from test_user_fdw.foo LIMIT 1;" fails
|
||||
sql cdb_testmember_1 "GRANT test_user_fdw TO cdb_testmember_2;"
|
||||
sql cdb_testmember_2 "SELECT a from test_user_fdw.foo LIMIT 1;" should 42
|
||||
sql cdb_testmember_1 "REVOKE test_user_fdw FROM cdb_testmember_2;"
|
||||
sql cdb_testmember_2 "SELECT a from cdb_fdw_user_defined_test.foo LIMIT 1;" fails
|
||||
sql cdb_testmember_1 "GRANT cdb_fdw_user_defined_test TO cdb_testmember_2;"
|
||||
sql cdb_testmember_2 "SELECT a from cdb_fdw_user_defined_test.foo LIMIT 1;" should 42
|
||||
sql cdb_testmember_1 "REVOKE cdb_fdw_user_defined_test FROM cdb_testmember_2;"
|
||||
|
||||
# Check that the table can be accessed by org members
|
||||
sql cdb_testmember_2 "SELECT a from test_user_fdw.foo LIMIT 1;" fails
|
||||
sql cdb_testmember_1 "SELECT cartodb.CDB_Organization_Grant_Role('test_user_fdw');"
|
||||
sql cdb_testmember_2 "SELECT a from test_user_fdw.foo LIMIT 1;" should 42
|
||||
sql cdb_testmember_1 "SELECT cartodb.CDB_Organization_Revoke_Role('test_user_fdw');"
|
||||
sql cdb_testmember_2 "SELECT a from cdb_fdw_user_defined_test.foo LIMIT 1;" fails
|
||||
sql cdb_testmember_1 "SELECT cartodb.CDB_Organization_Grant_Role('cdb_fdw_user_defined_test');"
|
||||
sql cdb_testmember_2 "SELECT a from cdb_fdw_user_defined_test.foo LIMIT 1;" should 42
|
||||
sql cdb_testmember_1 "SELECT cartodb.CDB_Organization_Revoke_Role('cdb_fdw_user_defined_test');"
|
||||
|
||||
# By default publicuser cannot access the FDW
|
||||
sql publicuser "SELECT a from test_user_fdw.foo LIMIT 1;" fails
|
||||
sql cdb_testmember_1 "GRANT test_user_fdw TO publicuser;" # but can be granted
|
||||
sql publicuser "SELECT a from test_user_fdw.foo LIMIT 1;" should 42
|
||||
sql cdb_testmember_1 "REVOKE test_user_fdw FROM publicuser;"
|
||||
sql publicuser "SELECT a from cdb_fdw_user_defined_test.foo LIMIT 1;" fails
|
||||
sql cdb_testmember_1 "GRANT cdb_fdw_user_defined_test TO publicuser;" # but can be granted
|
||||
sql publicuser "SELECT a from cdb_fdw_user_defined_test.foo LIMIT 1;" should 42
|
||||
sql cdb_testmember_1 "REVOKE cdb_fdw_user_defined_test FROM publicuser;"
|
||||
|
||||
# If there are dependent objects, we cannot drop the foreign server
|
||||
sql postgres "SELECT cartodb._CDB_Drop_User_PG_FDW_Server('test_user_fdw')" fails
|
||||
sql cdb_testmember_1 "DROP FOREIGN TABLE test_user_fdw.foo;"
|
||||
sql postgres "SELECT cartodb._CDB_Drop_User_PG_FDW_Server('test_user_fdw')"
|
||||
sql postgres "SELECT cartodb._CDB_Drop_User_PG_FDW_Server('user_defined_test')" fails
|
||||
sql cdb_testmember_1 "DROP FOREIGN TABLE cdb_fdw_user_defined_test.foo;"
|
||||
sql postgres "SELECT cartodb._CDB_Drop_User_PG_FDW_Server('user_defined_test')"
|
||||
|
||||
|
||||
# Teardown
|
||||
|
||||
Reference in New Issue
Block a user