fkeyToAuthUnique
Diagnostic Category: splinter/security/fkeyToAuthUnique
Severity: Error
Note
This rule requires a Supabase database/project and will be automatically skipped if not detected.
Description
Detects user defined foreign keys to unique constraints in the auth schema.
Remediation
Drop the foreign key constraint that references the auth schema.
SQL Query
(
select
'fkey_to_auth_unique' as "name!",
'Foreign Key to Auth Unique Constraint' as "title!",
'ERROR' as "level!",
'EXTERNAL' as "facing!",
array['SECURITY'] as "categories!",
'Detects user defined foreign keys to unique constraints in the auth schema.' as "description!",
format(
'Table `%s`.`%s` has a foreign key `%s` referencing an auth unique constraint',
n.nspname, -- referencing schema
c_rel.relname, -- referencing table
c.conname -- fkey name
) as "detail!",
'Drop the foreign key constraint that references the auth schema.' as "remediation!",
jsonb_build_object(
'schema', n.nspname,
'name', c_rel.relname,
'foreign_key', c.conname
) as "metadata!",
format(
'fkey_to_auth_unique_%s_%s_%s',
n.nspname, -- referencing schema
c_rel.relname, -- referencing table
c.conname
) as "cache_key!"
from
pg_catalog.pg_constraint c
join pg_catalog.pg_class c_rel
on c.conrelid = c_rel.oid
join pg_catalog.pg_namespace n
on c_rel.relnamespace = n.oid
join pg_catalog.pg_class ref_rel
on c.confrelid = ref_rel.oid
join pg_catalog.pg_namespace cn
on ref_rel.relnamespace = cn.oid
join pg_catalog.pg_index i
on c.conindid = i.indexrelid
where c.contype = 'f'
and cn.nspname = 'auth'
and i.indisunique
and not i.indisprimary)
How to configure
{
"splinter": {
"rules": {
"security": {
"fkeyToAuthUnique": "error"
}
}
}
}