with grantees as ( select distinct connect_by_root(usr.name) username, r_usr.name name from sys.sysauth$ sau, sys.user$ r_usr, sys.user$ usr where sau.privilege# = r_usr.user# and sau.grantee# = usr.user# connect by prior privilege# = grantee# start with grantee# in ( select user# from sys.user$ where name in ( select owner from dba_objects where object_type = 'DATABASE LINK' ) ) union all select distinct owner, owner from dba_objects where object_type = 'DATABASE LINK' ) select distinct owner from dba_objects where object_type = 'DATABASE LINK' minus select grt.username from grantees grt, dba_sys_privs sp where grt.name = sp.grantee and privilege = 'CREATE DATABASE LINK' order by owner ;