Как я могу изменить пароль для входа в SQL для базы данных, используя pyodbc? - PullRequest
1 голос
/ 18 июня 2019

Я пытаюсь сменить пароль для входа в sql базу данных, используя pyodbc в python

Но я получаю ошибку - неправильный синтаксис рядом с объектом "@ P1" (102) (SQLExecDirectW) ..... Не удается подготовить инструкцию(8180)

config.login = 'user'
config.haslo = '12345'
haslo = 'abcde'
con = pyodbc.connect("DRIVER={ODBC Driver 11 for SQL Server};"
                  "SERVER=Serwer;"
                  "DATABASE=Baza;"
                  "UID="+config.login+";"
                  "PWD="+config.haslo+";"
                  "autocommit=true")
kursor = con.cursor()
zapytanie = """ALTER LOGIN ? with password = ? old_password = ?"""
val = (config.login, haslo, config.haslo)
kursor.execute(zapytanie, val)
kursor.commit()
kursor.close()
del kursor

1 Ответ

1 голос
/ 18 июня 2019

ODBC для SQL Server, очевидно, не поддерживает параметризацию оператора ALTER LOGIN. Вместо использования этого ...

uid = 'bubba'
old_pwd = 'NASCAR'
new_pwd = 'GRITS'
sql = "ALTER LOGIN ? WITH password ? old_password ?"
crsr.execute(sql, uid, new_pwd, old_pwd)

... вам нужно будет сделать что-то вроде этого:

uid = 'bubba'
old_pwd = 'NASCAR'
new_pwd = 'GRITS'
sql = f"ALTER LOGIN {uid} WITH PASSWORD = '{new_pwd}' OLD_PASSWORD = '{old_pwd}'"
crsr.execute(sql)

ВАЖНО - Как и в случае любого динамического SQL, он потенциально уязвим к проблемам внедрения SQL. Обязательно очистите значения login_id и пароля!

(Давние пользователи SQL Server могут вспомнить, что существует системная хранимая процедура с именем sp_password, но документация указывает, что она устарела.)

...