1
import unicodedata

PRIVATE = {"salaries", "customers"}

def canonical(name: str) -> str:
    return unicodedata.normalize("NFC", name).strip().lower()

def get_rows(table: str, user):
    real = canonical(table)                 # normaliza UMA vez
    if real in PRIVATE and not user.is_admin:
        raise Forbidden()
    return db.execute("select * from tables where name = ?", [real])
    
    db.execute("select * from tables where name = ?", [real])

Ainda tem uma falha, passe table como "salaries ;-- " e veja a segurança indo pro ralo, se realmente quer corrigir assim, ANTES verifique se a tabela existe:

if real not in DB_TABLES:
    raise Forbidden()

No entanto a melhor abordagem nesse modelo é, além de checar se a tabela existe, ter a política: NENHUMA tabela é selecionável por padrão, apenas as explicitamente definidas como selecionáveis podem ser selecionadas

Se puder usar views prontas é melhor ainda

Carregando publicação patrocinada...