繁体   English   中英

PostgreSQL 和 Python:自动更改密码

[英]PostgreSQL and Python: Automated Password change

我一直在尝试自动化 Open Street Map Server 的安装,因为还没有人发布过,而且这项任务非常乏味。 为了做到这一点,我在脚本中处理 PostgreSQL 数据库,我让 Python 负责。

情况是这样的:基本上我在整个 bash 代码中运行处理数据库的 python 脚本。 我正在尝试使安装尽可能用户友好,其中一部分是自动化 PostgreSQL 设置。 我在 bash 中提示用户输入他们想用于 PostgreSQL 附带的 postgres 数据库的密码。 然后我将他们的密码作为命令行参数发送给 Python 脚本。

这是我遇到问题的脚本部分:

import psycopg2
import sys


con = None
code = sys.argv[1]

try:

    con = psycopg2.connect(database='postgres', user='postgres')

    cur = con.cursor()
    cur.execute("ALTER USER postgres WITH PASSWORD '%s'" % code)

基本上:在我更改 postgres 数据库密码的底线,它实际上不起作用。 我知道这一点,因为后来我的 bash 脚本提示我输入密码,这导致身份验证失败。

我对此很陌生,所以如果有人有一些好的建议,将不胜感激。

请使用下面的代码,您可以生成随机密码并更新它们 注意:要使此代码起作用,在使用此代码之前,readwrite1 用户必须存在于数据库中

from psycopg2 import Error
import psycopg2
import random    
#password generation
def password_generator(password_length):
    # maximum length of password needed
    characters = string.ascii_letters + string.digits + '!@#$%^&*()'
    password = ''.join(random.choice(characters) for i in range(password_length))
    return password


#define a function that handles and parses psycopg2 exceptions
def print_psycopg2_exception(err):
    err_type, err_obj, traceback = sys.exc_info()

    # get the line number when exception occured
    line_num = traceback.tb_lineno
    # print the connect() error
    print ("\npsycopg2 ERROR:", err, "on line number:", line_num)
    print ("psycopg2 traceback:", traceback, "-- type:", err_type)

    # psycopg2 extensions.Diagnostics object attribute
    print ("\nextensions.Diagnostics:", err.diag)

    # print the pgcode and pgerror exceptions
    print ("pgerror:", err.pgerror)
    print ("pgcode:", err.pgcode, "\n")

def update_password():
    password=password_generator(10)
    try:
        con = psycopg2.connect(host="host here",database="dbhere", user="username",password="password")
        cur = con.cursor()
        cur.execute("alter user readwrite1 with password %(password)s;", {'password': password})
        con.commit()
    except Exception as err:
        # pass exception to function
        print_psycopg2_exception(err)
        exit(1)
    finally:
        print('password is: ', password)
        if con:
            con.close()
    return password

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM