PDOException #1045 SQLSTATE[28000] [1045]…
- SontoEremo
- Člen | 341
Zdravím,
Som už na konci síl nedokážem sa nijak pripojiť na DB vždy mi
vyhodí chybu:
**PDOException #1045**
**SQLSTATE[28000] [1045] Access denied for user 'vp_username'@'10.10.29.10' (using password: YES)**
Viem, že sa to už riešilo ale ani to mi nepomohlo
Toto je môj config.neon schválne som vytvoril
prihlasovacie údaje do db s heslom 123456 ale nijak nepomohlo.
Porovnával som všetky moje súbory so súbormy v sandboxe všetko je ako má
už fakt neviem kde robím chybu.
#
# SECURITY WARNING: it is CRITICAL that this file & directory are NOT accessible directly via a web browser!
#
# If you don't protect this directory from direct web access, anybody will be able to see your passwords.
# https://nette.org/en/security-warning
#
common:
parameters:
php:
date.timezone: Europe/Prague
# zlib.output_compression: yes
nette:
application:
errorPresenter: Error
database:
dsn: 'mysql:host=localhost;dbname=vp_dbname'
user: 'vp_username'
password: '123456'
session:
expiration: 30 days
services:
authenticator: Authenticator
routerFactory: RouterFactory
router: @routerFactory::createRouter
factories:
production < common:
development < common:
Môj Authenticator
<?php
use Nette\Security as NS,
Nette\Utils\Strings;
/**
* Select DB
* Check connect
*/
class Authenticator extends Nette\Object implements NS\IAuthenticator
{
/** @var Nette\Database\Connection */
private $database;
/**
* Construct Function DB Connect
* @return Nette\Database\Connection
*/
function __construct(Nette\Database\Connection $database)
{
$this->database = $database;
}
/**
* Performs an authentication.
* @return Nette\Security\Identity
* @throws Nette\Security\AuthenticationException
*/
function authenticate(array $credentials)
{
list($username, $password) = $credentials;
$row = $this->database->table('users')->where('username', $username)->fetch();
if(!$row)
{
throw new NS\AuthenticationException("Užívateľ '$username' nejnájdený", self::IDENTITY_NOT_FOUND);
}
if($row->password !== $this->calculateHash($password, $row->password))
{
throw new NS\AuthenticationException('Neplatné heslo', self::INVALID_CREDENTIAL);
}
unset($row->password);
return new NS\Identity($row->id, NULL, $row->toArray());
}
/**
* Computes salted password hash.
* @param string
* @return string
*/
public static function calculateHash($password, $salt = NULL)
{
if ($password === Strings::upper($password)) { // perhaps caps lock is on
$password = Strings::lower($password);
}
return crypt($password, $salt ?: '$2a$07$' . Strings::random(22));
}
}
A ešte moj AuthPresenter nie je síce dokončený pre registráciu ale prihlasovanie by malo fungovať
<?php
use Nette\Application\UI\Form,
Nette\Utils\Html;
/**
* Display Login & LogOut Form
* @return Nette\Application\UI\Form
*/
class AuthPresenter extends BasePresenter
{
/**
* Create a Form
* Display form in Template
*/
protected function createComponentLoginInForm()
{
$form = new Form;
$form->addText('username', 'Prezývka:')
->setRequired('Musíte zadať prezývku!', Form::FILLED);
$form->addPassword('password', 'Heslo:')
->setRequired('Musíte zadať heslo!', Form::FILLED);
$form->addCheckBox('remember', 'Zapamätať si ma');
$form->addSubmit('login', 'Prihlásiť');
$form->onSuccess[] = $this->loginInFormSubmitted;
return $form;
}
/**
* Check is User Success Login
* if is Success Login @return loginInFormSubmitted
*/
public function loginInFormSubmitted(Form $form)
{
try {
$user = $this->getUser();
$values = $form->getValues();
if ($values->remember)
{
$user->setExpiration('+30 days', FALSE);
}
$user->login($values->username, $values->password);
$this->flashMessage('Přihlášení bylo úspěšné.', 'success');
$this->redirect('Homepage:');
} catch (Nette\Security\AuthenticationException $e) {
$form->addError('Neplatné uživatelské jméno nebo heslo.');
}
}
/** Out Form */
public function handleLogOut()
{
$this->getUser()->logout();
$this->redirect('Index:index');
}
/**
* Create Register Form
* Display form in Template
*/
protected function createComponentRegisterInForm()
{
$form = new Form;
$form->addText('username', 'Prezývka:')
->setRequired('Musíte zadať prezývku!');
$form->addPassword('password', 'Heslo:')
->setRequired('Musíte zadať heslo!');
$form->addText('email', 'Email:')
->setRequired('Musíte zadať emailovú adresu')
->addRule(Form::EMAIL, 'Nesprávne zadaná emailová adresa');
$gen = array('m' => 'Muž', 'f' => 'Žena');
$form->addRadioList('gander', 'Pohlavie:', $gen);
$countries = array(
'Europe' => array(
'SK' => 'Slovensko',
'CZ' => 'Česko',
'HU' => 'Maďarsko'
),
'USA' => 'Spojené Štáty Americké'
);
$prompt = Html::el('option')->setText('Krajina')->class('prompt');
$form->addSelect('country', 'Krajina:', $countries)
->setPrompt($prompt);
$form->addCheckBox('agree')
->setOption('description', Html::el('span')
->setHtml('Súhlasím s <a href="../docs/ListTerms">Podmienkamy</a>'))
->addRule(Form::EQUAL, 'Musíte súhlasiť s podmienkamy!', TRUE);
$form->addSubmit('subreg', 'Registrácia');
$form->onSuccess[] = $this->registerIsSuccess;
return $form;
}
/**
* If the value of the form sent to the correct
* Return a report on user success and redirect
* @return Success Page
*/
public function registerIsSuccess()
{
/** This @parameter return if is Success or Bad */
}
}
hostujem u Websupportu.
Nette 2.0.10 pre PHP 5.3
Editoval SontoEremo (22. 3. 2013 13:04)
- castamir
- Člen | 629
Nedávno jsem řešil podobný problém, který házel stejnou chybu. Problém byl v databázi, kterou jsem dostal vyexportovanou. V sql kódu byly komentáře, jež byly ve stejném formátu user@host, ale neshodovaly se s mým přihlašovacím jménem a hostem. Řešením bylo vyexportovat databázi znovu (např. přes adminer), smazat současné tabulky a vytvořit je znovu.
- SontoEremo
- Člen | 341
castamir napsal(a):
Nedávno jsem řešil podobný problém, který házel stejnou chybu. Problém byl v databázi, kterou jsem dostal vyexportovanou. V sql kódu byly komentáře, jež byly ve stejném formátu user@host, ale neshodovaly se s mým přihlašovacím jménem a hostem. Řešením bylo vyexportovat databázi znovu (např. přes adminer), smazat současné tabulky a vytvořit je znovu.
Nazdar vďaka za odpoveď
toto je export z Adminer-a:
-- Adminer 3.5.0 MySQL dump
SET NAMES utf8;
SET foreign_key_checks = 0;
SET time_zone = 'SYSTEM';
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` char(60) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- 2013-03-22 13:33:27
A toto z phpMyAdmin-a:
-- phpMyAdmin SQL Dump
-- version 3.5.2.2
-- http://www.phpmyadmin.net
--
-- Hostiteľ: localhost:3306
-- Vygenerované: Pi 22.Mar 2013, 13:34
-- Verzia serveru: 5.1.63-log
-- Verzia PHP: 5.4.3
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Databáza: `vp_dbname`
--
-- --------------------------------------------------------
--
-- Štruktúra tabuľky pre tabuľku `users`
--
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` char(60) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Zmazal a následne vytvoril nuvú tabuľku users ale žiadna zmena vždy tá istá chyba.
**PDOException #1045**
**SQLSTATE[28000] [1045] Access denied for user 'vp_username'@'10.10.29.10' (using password: YES)**
Fakt nechápem možno robím niekde chybu ale kde to vie asi len boh alebo najeký ten NetteGuru :)
- SontoEremo
- Člen | 341
Lexi napsal(a):
A pri vykonavani jakeho sql dotazu ti to haze tuto chybu? Rovnou pri connectu?
Pri odoslaný formulára k prihláseniu
- Jan Mikeš
- Člen | 771
No podle te chybove hlasky to vypada ze nemas opravneni insertovat. Kdyz pres adminera/phpmyadmina primo na webu vlozis testovaci radek funguje ti to? Pokud ano, zkus si zkopirovat sql dotaz po insertu a zkus ho execnout primo v nette napr v base presenteru, jestli se ti dany radek vlozi stejne. Pokud ne, kontaktuj technickou podporu, ze mas problem s databazi a opravnenimi :).
- SontoEremo
- Člen | 341
Lexi napsal(a):
No podle te chybove hlasky to vypada ze nemas opravneni insertovat. Kdyz pres adminera/phpmyadmina primo na webu vlozis testovaci radek funguje ti to? Pokud ano, zkus si zkopirovat sql dotaz po insertu a zkus ho execnout primo v nette napr v base presenteru, jestli se ti dany radek vlozi stejne. Pokud ne, kontaktuj technickou podporu, ze mas problem s databazi a opravnenimi :).
Cez sql dotaz v adminer-i a tak isto phpMyAdmin-e sa zapíše do
tabuľky
Prepáč tomuto nerozumiem:
a zkus ho execnout primo v nette napr v base presenteru
Myslíš tento sql dotaz po insertu?
INSERT INTO `vp_dbname`.`users` (
`id` ,
`username` ,
`password`
)
VALUES (
NULL , 'Tester', MD5( '123456' )
)
prosím ako ho execnut? ešte nie som až tak zrelý v Nette :)
Editoval SontoEremo (22. 3. 2013 14:27)
- castamir
- Člen | 629
Databáze se normálně do presenteru v této formě dostat nemá, ale pro účely tohoto testu to nevadi.
// tvuj Basepresenter
private $connection;
public final function injectConnection(Nette\Database\Connection $connection)
{
$this->connection = $connection;
}
public function startup()
{
parent::startup();
$this->connection->table("users")->insert(array( // id je auto_increment
"username" => "Tester",
"password" => "MD5( '123456' )"
));
}
- SontoEremo
- Člen | 341
castamir napsal(a):
Databáze se normálně do presenteru v této formě dostat nemá, ale pro účely tohoto testu to nevadi.
// tvuj Basepresenter private $connection; public final function injectConnection(Nette\Database\Connection $connection) { $this->connection = $connection; } public function startup() { parent::startup(); $this->connection->table("users")->insert(array( // id je auto_increment "username" => "Tester", "password" => "MD5( '123456' )" )); }
Stále to isté tá istá chyba bez zmeny…
Já už s tohto zošaliem asi :)
Ešte jedna otázka dúfam, že nebudem za hlupáka
Nemám náhodou Selectovať namiesto Insertovať? keďže sa
pokúšam prihlásiť? či?
- Jan Mikeš
- Člen | 771
Presne to jsem mel namysli. Pripadne pro ucel testu muzes pouzit primo toto:
public function startup(){
parent::startup();
$this->context->database->exec("INSERT INTO `vp_dbname`.`users` ( `id` , `username` , `password` ) VALUES ( NULL , 'Tester', MD5( '123456' ) )");
// nebo $this->context->getByType("Nette\Database\Connection")->exec("INSERT INTO `vp_dbname`.`users` ( `id` , `username` , `password` ) VALUES ( NULL , 'Tester', MD5( '123456' ) )");
}
Neni to ani trochu cisty zpusob, je to pouze pro otestovani zda mas prava a zda se ti tento dotaz provede.
- Jan Mikeš
- Člen | 771
Zkousis zda mas prava na to vkladat do db. Muzes zkusit klidne i select.
Mozne priciny proc ti to nefunguje:
- mas spatne vyplnene udaje pro pripojeni k db (host/user/pass, spis bych to videl na hosta pokud je chyba v tomto)
- nekde nastala chyba a tebou vytvoreny ucet v PMA nema opravneni pro inserty (mozna i selecty, kdo vi)
Zkus tedy overit zda 1. bod muzes vyloucit, pokud ho vyloucit muzes, kontaktuj technickou podporu, ti budou urcite chytrejsi.
- SontoEremo
- Člen | 341
Lexi napsal(a):
Zkousis zda mas prava na to vkladat do db. Muzes zkusit klidne i select.
Mozne priciny proc ti to nefunguje:
- mas spatne vyplnene udaje pro pripojeni k db (host/user/pass, spis bych to videl na hosta pokud je chyba v tomto)
- nekde nastala chyba a tebou vytvoreny ucet v PMA nema opravneni pro inserty (mozna i selecty, kdo vi)
Zkus tedy overit zda 1. bod muzes vyloucit, pokud ho vyloucit muzes, kontaktuj technickou podporu, ti budou urcite chytrejsi.
bod1) čo sa týka host-a je to buď
localhost,db51.domena.xx alebo /tmp/mysql51.sock ale ani jedno
stoho nepomohlo. user a pass a dbname som schválne spravil na
vp_username ' vp_dbname ' 123456 / pretože som myslel, že je
to mojimi údajmy ale ako som zistil nie je a tie ja nevytváram v PMA ale vo
webadmine u hostéra už odjakživa :). Tak som si vytvoril jednoduchý script
na Insetr a Select v čistom php a funguje za pomoci tých údajov čo svedčí
o tom, že mám opravnenie pre insetry , selecty, updaty atď… :) .
Žial je tu ešte drobnosť a to, že sa mi nezapisujú errory a logy do /log a
mám správne nastavenú cestu a CHMOD na 777 fakt neviem čo som dodrbal ale
v systéme som sa vôbec nehrabal.
Skúsim ešte kontaktovať HelpDesk ale dúfam, že niekto ešte prispeje nejakým riešení a, že chybu budem mať ja aspoň sa do budúcna poučí. :)
Editoval SontoEremo (22. 3. 2013 15:28)
- SontoEremo
- Člen | 341
VYRIEŠENÉ
Povolil som PHP 5.4 a Začalo to šalapať, len neviem prečo s PHP
5.3 sú problémy!!! budem to musieť nejako dať DOKOPY
Ale hlavne FUNGUJE!!!
Ďakujem všetkym za POMOC :) Súper Fórum toto :)
Editoval SontoEremo (22. 3. 2013 15:47)