2015-11-11 5 views
0

Мне нужно создать страницу входа, которая будет использовать имя пользователя и пароль от sys.user$, но при необходимости входа в систему логин не удался.

Но если я использую таблицу, которую я создал, она может.

$name=$_REQUEST['name']; 
$password=$_REQUEST['password']; 

if(!empty($name) && !empty($password)){ 

    $sqlCheck=OCIParse($c,"SELECT NAME, PASSWORD FROM sys.user$ 
          WHERE NAME='$name' 
          AND PASSWORD='$password'"); 

    OCIExecute($sqlCheck,OCI_DEFAULT); 

    while(OCIFetch($sqlCheck)){ 
    $db_name = OCIResult($sqlCheck, "NAME"); 
    $db_password = OCIResult($sqlCheck, "PASSWORD"); 
    } 

    if($db_name != $name && $db_password != $password){ 
    echo "<script>window.location.href='../index.php?page=login&error=1';</script>"; 
    exit(); 
    } else { 
    $_SESSION['verify_name'] = $name; 
    echo "<script>window.location.href='../index.php?page=please_verify';</script>"; 
    exit(); 
    } 
} 

ответ

0

Предполагая, что вы не используете SYS пользователя для приложения,

Вам нужна привилегия для доступа SYS.USER$ от SYS пользователя. Проверьте, есть ли у вас привилегия для доступа к таблице.

Решение должно быть grant select privilege от пользователя SYS любому пользователю, которого вы используете в своем приложении для подключения к базе данных.

+0

Я использую sys.user $ для приложения. Если я скопирую пароль Hash и вставьте в поле пароля в форме входа в систему, логин будет успешным. Но, если я использую свой реальный пароль, вход недействителен. – john

+0

прочитал мой предыдущий комментарий – john

+0

Я думаю, вы должны проверить часть шифрования паролей в своем приложении. Потому что Oracle шифрует пароль и сохраняет его. И если вы не шифруете и не сравниваете пароли, то их не будет сопоставлено. Либо зашифруйте пароль и сопоставьте, либо расшифруйте хэш-код пароля и сравните его. Также дайте мне знать версию базы данных Oracle, которую вы используете. – Jeethu

 Смежные вопросы

  • Нет связанных вопросов^_^