2015-11-26 2 views
1

Я знаю, что в StackOverflow есть много похожих вопросов, но я прочитал и перечитал их, и я не могу решить свою проблему.Python и Postgresql: OperationalError: fe_sendauth: пароль не указан

Я разрабатываю приложение Python, которое использует Peewee и Psycopg2 для доступа к базам данных PostGresQL. Все это выполняется на виртуальной машине Vbrant Ubuntu.

Я постоянно получаю эту ошибку, когда я пытаюсь добавить пользователя с помощью Python:

peewee.OperationalError: fe_sendauth: нет пароля прилагается

Вот код, где я пытаюсь добавить пользователя:

def add_user(user, password): 
    """ 
    :param username: 
    :param password: 
    :return: 
    """ 
    try: 
     #add user to admin user table 
     #AdminUserModel.create(username=user, password=password) 

     # add user to psql 
     conn = connect_to_db('postgres', 'postgres') 
     cursor = conn.cursor() 
     add_query = "CREATE ROLE %s WITH CREATEDB LOGIN PASSWORD %s" 
     add_data = (AsIs(user), password) 
     cursor.execute(add_query, add_data) 

    except IntegrityError: 
     return False 

    return True 

def connect_to_db(db_name, username): 
    conn = psycopg2.connect(dbname=db_name, user=username) 
    conn.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT) 
    return conn 

Я изменил мой файл pg_hba.conf к:

# Database administrative login by Unix domain socket 
local all    postgres        trust 

# "local" is for Unix domain socket connections only 
local all    all          md5 

# IPv4 local connections: 
host all    vagrant   127.0.0.1/32   trust 
host all    all    127.0.0.1/32   md5 

# IPv6 local connections: 
host all    vagrant   ::1/128     trust 
host all    all    ::1/128     md5 

И перезапустили мой сервер postgresql.

Вот мой Vagrantfile:

Vagrant.configure(2) do |config| 
    config.vm.box = "ubuntu/trusty64" 

    config.vm.provider :virtualbox do |vb| 
    # use for debugging the vm 
    # vb.gui = true 

    # speed up networking 
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] 
    vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"] 
    end 

    config.vm.provision "shell", inline: <<-SHELL 
    sudo apt-get update 
    sudo apt-get install -y python-software-properties 
    sudo apt-get update -y 
    # sudo apt-get upgrade -y 

    sudo apt-get install -y postgresql postgresql-contrib postgresql-client libpq-dev 
    sudo sed -i "s/#listen_address.*/listen_addresses '*'/" /etc/postgresql/9.3/main/postgresql.conf 
    sudo cp /home/vagrant/cs419-project/vagrant_files/pg_hba.conf /etc/postgresql/9.3/main/pg_hba.conf 

    sudo service postgresql restart 

    # createuser -U postgres -s vagrant 
    sudo -u postgres psql -c "CREATE ROLE vagrant SUPERUSER LOGIN PASSWORD 'vagrant'" 
    sudo su postgres -c "createdb -E UTF8 -T template0 --locale=en_US.utf8 -O vagrant cs419" 

    sudo apt-get install -y python-pip python-psycopg2 
    sudo pip install peewee 
    SHELL 

    config.vm.synced_folder ".", "/home/vagrant/cs419-project", id: "vagrant", 
    owner: "vagrant", 
    group: "admin", 
    mount_options: ["dmode=775,fmode=664"] 
end 

Пожалуйста, любая помощь вы можете дать очень высокую оценку!

ПРИМЕЧАНИЕ: Самая странная часть - это все, казалось, работало раньше, а затем я не знаю, что я изменил, но она перестала работать.

+0

Сервер запрашивает пароль у клиента, но вы не предоставили пароль. –

+0

Но я подписываюсь как «postgres», которому не нужен пароль. По крайней мере, мне это не нужно, когда я подключаюсь через командную строку ... –

+0

Ваш pg_hba.conf указывает, что для tcp-соединений требуется пароль, кроме как пользовательский «бродяга». «Неверный пароль» для «postgres» настроен только для доступа к сокету Unix –

ответ

1

В файле pg_hba.conf используется метод trust доступа для нашего fe_sendauth пользователя