簡體   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