Python是获取数据库访问权限的安全方式吗?

时间:2017-09-20 12:05:48

标签: python

我对如何“保护”数据库的信息以进行连接有一些疑问。 有一点我可以以更安全的方式访问数据库?休息Api? 或者,如果有人可以告诉我在代码上发送访问权限更安全

提前致谢

config = {
    'user': 'user',
    'password': 'password.',
    'host': 'localhost',
    'database': 'files_to_check',
    'raise_on_warnings': True,
}

try:
    # Try to connect to database
    cnx = mysql.connector.connect(**config)


    # Pointer of the sql
    cursor = cnx.cursor()

    # Query to get the files from the database
    query = ("SELECT filename FROM filenames")
    queryhash = ("SELECT hash FROM filenames")

    # Execute the query
    cursor.execute(query)

    # select all the filenames from database
    # array to fill with the files from the database
    files_to_check = [str(row[0]) for row in cursor.fetchall()]
    cursor.close()

    cursor = cnx.cursor()
    cursor.execute(queryhash)
    # array to fill with the hash from the database
    hash_to_check = [str(row[0]) for row in cursor.fetchall()]

# Error definition on connection
except mysql.connector.Error as err:
    # Check username and password
    if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
        print("[*] Username or password are invalid")
    elif err.errno == errorcode.ER_BAD_DB_ERROR:
        # Check if database that are connection exists
        print("[*] Database does not exist")
    else:
        print(err)
else:
    cnx.close()

2 个答案:

答案 0 :(得分:3)

一种方法是使用外部配置文件来存储用户,密码和其他敏感信息。

然后使用操作系统的权限系统限制对该文件的访问,以便您的应用程序可以读取该文件,但其他无特权的用户则不能。

还要确保使用与数据库的SSL连接。

您还应该查看身份验证插件。

答案 1 :(得分:3)

我猜你的问题是如何不必在代码中包含数据库信息(主机,端口,密码等)。我想说两种最简单的方法是:

  • 环境变量
  • 单独的配置文件

环境变量

import os

config = {
    'user': os.getenv('DB_USER'),
    'password': os.getenv('DB_PASSWORD'),
    'host': os.getenv('DB_HOST'),
    'database': os.getenv('DB_DATABASE'),
    'raise_on_warnings': os.getenv('DB_DATABASE', 'true') == 'true',
}

配置文件

import json

with open('config.json') as file:
    config = json.load(file)