2016-04-29 5 views
3

У меня есть сценарий python, который я запускаю локально, у которого есть пароль для другого приложения, встроенного в вызов os.system. Я запутал свой пароль, сохранив его в БД, к которому только я имею доступ, а затем используя windows auth для подключения к БД (поскольку сценарий должен быть автоматизирован, я не могу запросить PW).Защитить пароль в скрипте Python

С учетом сказанного мне пришло в голову, не мог ли кто-то просто изменить мой сценарий и распечатать 'pw' var, чтобы получить мой пароль? Я работаю в облачной среде, где другие разработчики будут иметь доступ к моему сценарию. Есть ли способ отвлечь его дальше, чтобы кто-то не мог просто изменить мой скрипт и получить pw?

import os 
import sqlalchemy as sa 
import urllib 
import pandas as pd 


#Specify the databases and servers used for reading and writing data. 
read_server = '~~SERVER_HERE~~' 
read_database = '~~DATABASE_HERE~~' 

#Establish DB Connection 
read_params = urllib.quote_plus("DRIVER={SQL Server};SERVER="+read_server+";DATABASE="+read_database+";TRUSTED_CONNECTION=Yes") 
read_engine = sa.create_engine("mssql+pyodbc:///?odbc_connect=%s" % read_params) 

#Read PW from DB and set to variable 
pw_query = """ SELECT DISTINCT PW FROM ~~TABLENAME_HERE~~ """ 
pw = pd.read_sql_query(pw_query,con=read_engine,index_col=None) 
pw = pw.values.tolist() 
pw = str(pw[0]) 
pw = pw.lstrip("['").rstrip("]'") 

#Establish connection to server 
os.chdir(r"C:\tabcmd\Command Line Utility") 
os.system(r'tabcmd login -s https://~~myURL~~ -u tabadmin -p {mypw}'.format(mypw = str(pw))) 
#Make sure you update the below workbook, site names, and destination directory. 
os.system(r'tabcmd get "~~FILE_Location~~" -f "~~Destination_DIR~~"') 

Я использую стандартный python (Cpython) и MS SQL Server.

ответ

1

Нет реального способа защитить свой пароль, если кто-то может изменить сценарий.

Однако, если общая облачная среда имеет отдельных пользователей (например, при входе через ssh, где каждый пользователь имеет свой собственный пользователь на сервере), вы можете изменить разрешения для ограничения доступа к вашему коду. Если нет, то я не думаю, что это возможно.

+0

хороший вызов, я думаю, что защита доступа к скрипту является ключом. Есть ли способ защитить его даже от администратора сервера, который управляет нашими учетными записями Windows? –

+0

@Rick Вы должны иметь возможность, потому что администратор сервера не должен иметь доступ к вашим данным - они могут управлять учетными записями, но не вашими данными. Однако стоит сначала спросить. К сожалению, я никогда не работал с сервером Windows, поэтому мне неизвестны подробности. –

1

Учитывая, что вы также жестко кодируете свой адрес базы данных и код доступа, ничто не мешает другим просто подключиться к вашей базе данных, например.

Существуют способы обфускации кода, но в конце нет безопасного способа хранения вашего пароля, а также способов, требующих больше усилий для его извлечения.

Также см https://crypto.stackexchange.com/questions/19959/is-python-a-secure-programming-language-for-cryptography

TLDR; Пока кто-то имеет доступ к вашей программе или даже исходному коду, жесткий диск может быть извлечен - так что в вашем случае имеет смысл ограничить доступ к этой программе.

+0

привет, tobspr. Я использую windows auth для подключения к БД, и я ограничил доступ к БД только себе. Однако администратор сервера имеет доступ к моей БД, чтобы они могли получить доступ к pw. Есть ли лучший способ все вместе? –

Смежные вопросы