postgresql 如何在没有硬编码和暴露凭据的情况下对数据库连接进行身份验证?

wgx48brx  于 2023-10-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(115)

所以,基本上,我的python程序是一个客户端,它在启动时连接到数据库以获得一个令牌来继续工作。
现在我的身份验证方法对我来说看起来完全蹩脚,我不满意:

async def create_db_connection():
        while True:
            try:
                conn = await asyncpg.connect(
                    user=C.get_credentials(A.Decrypt(user), "vosPgMa"),
                    password=C.get_credentials(A.Decrypt(password), "vosPgMa"),
                    host=C.get_credentials(A.Decrypt(host), "vosPgMa"),
                    port=C.get_credentials(A.Decrypt(port), "vosPgMa"),
                    database=C.get_credentials(A.Decrypt(database), "vosPgMa")
                )
                return conn
            except Exception as e:
                logging.error(f"\n\tError connecting to the database: {e}")
                await asyncio.sleep(0.7)

# Update last time active
    async def log_off_database(token):
        while True:
            try:
                conn = await B.create_db_connection()
                await conn.execute(
                            'UPDATE "Tokens" SET "Status" = $1, "UsedBy" = $2 WHERE "Token" = $3',
                            'Free', '-', token
                        )
            except Exception as e:
                logging.error(f"Error logging off: {e}")
            finally:
                await B.close_db_connection(conn)
            await asyncio.sleep(9)

我应该如何实现auth过程这样:

  • 我的证件没有存储在任何文件存储器里。(包括.env)
g2ieeal7

g2ieeal71#

在客户端创建一个数据库可能是一个问题,特别是当你需要运行这样的查询时。根据您正在构建的程序类型,它可能会使您的数据库暴露于SQL注入或类似的攻击。
我建议你构建一个API或任何其他类型的接口,在服务器端运行这些连接和查询,只将结果返回给客户端。
使用Python,你有一些库已经为你做了部分安全工作,比如Fast API和Flask。
阅读更多信息:
Fast API - Security
How to secure a REST Api on flask

相关问题