Non so se ho capito bene la tua situazione 
Cmq l'autenticazione php è diversa da quella del webserver. Sono due cose a livelli diversi, avresti quindi due login (php e webserver).
Se puoi prendere il nome file dal database (solo il nome, o anche il path ?), allora nel link metti l'id del record che contiene il nome file. Nel "download.php" fai una query sul db, riprendi il nome e ed invii il file all'utente:
Codice PHP:
if($logged){
$id = (int)$_GET['id'];
$query = "SELECT nome_file FROM tabella WHERE id = $id";
// verifica che viene trovato un risultato!
$file = // prendo il risultato della query. Dipende da che driver usi (mysql, mysqli, pdo)
// assumo che $file contiene tutto il path
$filename = basename($file);
if(file_exists($file)){
header('Content-Type: application/octet-stream');
header('Content-disposition: attachment; filename="' . $filename . '"');
readfile($file);// Ricorda che non ci devono essere altri output prima e dopo queste istruzioni
}else{
// file non trovato
}
}else{
// Accesso non consentito
}
Il link al download sarà, ad esempio
codice:
<a href="download.php?id=4" >scarica</a>
// Ovviamente il 4 sarà sostituito dagli id presi nella tabella del db