【问题标题】:encrypt data in PostgreSQL using ORM使用 ORM 加密 PostgreSQL 中的数据
【发布时间】:2019-07-11 11:59:34
【问题描述】:

我想加密 PostgreSQL 中的数据。我使用以下两种方法插入数据,一种使用ORM,另一种不使用ORM

db = sql.create_engine(connection_string)
metadata = sql.schema.MetaData(bind=db, reflect=True)
inputStringtable = sql.Table('person_info', metadata, autoload=True)

######Using ORM########
class RowInputString(object):
    pass
orm.Mapper(RowInputString, inputStringtable)
Sess = orm.sessionmaker(bind=db)
session = Sess()

inputTable = RowInputString()
inputTable.person_id = personId
inputTable.person_name = personName
session.add(inputTable)
session.commit()
################################

######not using ORM
def inserting_data(personId, personName):
    insertData = inputStringtable.insert().values(person_id=personId, person_name=personName)
    conn = db.connect()
    conn.execute(ins)
inserting_data(personId, personName)

我遇到了下面的 sn-p 加密并将其发送到数据库:

INSERT INTO users(login, passwd)
VALUES('my_login', crypt('my_password', gen_salt('md5')));

我觉得如何在我的代码中使用这个 sn-p 有点困难?

【问题讨论】:

  • 看起来crypt 使用盐对密码进行哈希处理。这将是单向的:取回明文 (my_password) 在计算上是不可行的。据我了解,这不是您的用例...
  • 另一方面,密码不应该加密存储,而是散列。

标签: python-3.x postgresql orm sqlalchemy


【解决方案1】:

对于一般加密,您可以使用EncryptedType SQLAlchemy 类型。

对于密码哈希,您可以在 SQLAlchemy 中定义自定义类型:

https://github.com/sqlalchemy/sqlalchemy/wiki/DatabaseCrypt

这使用TypeDecorator API 中的bind_expression 将传入的列值映射到涉及内置数据库函数(gen_saltcrypt)的表达式。

【讨论】:

  • 感谢您的回复,所以我可以使用 EncryptedType 加密并存储在数据库中。我可以知道如何解密吗?
  • 请问如何解密?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-05
  • 2015-12-29
  • 1970-01-01
  • 2013-09-10
  • 2019-05-18
相关资源
最近更新 更多