У меня есть приложение flask, которое использует дополнение psql на Heroku. Флаксклальхемь models.py выглядит следующим образом:
class Group(db.Model):
id = db.Column(db.Integer, primary_key=True)
group_name = db.Column(db.String, unique=True, nullable=False)
auth = db.Column(db.String, nullable=False)
...
users = db.relationship('User', backref='group', lazy=True)
posts = db.relationship('Post', backref='group', lazy=True)
class User(db.Model, UserMixin):
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True)
first_name = db.Column(db.String, nullable=False)
last_name = db.Column(db.String, nullable=False)
username = db.Column(db.String, unique=True, nullable=False)
email = db.Column(db.String, unique=True, nullable=False)
password = db.Column(db.String, nullable=False) # even though this is hashed, I would like to encrypt this as well
posts = db.relationship('Post', backref='user', lazy=True)
group_id = db.Column(db.Integer, db.ForeignKey('group.id'), nullable=False)
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
first_name = db.Column(db.String, nullable=False)
last_name = db.Column(db.String, nullable=False)
date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
group_id = db.Column(db.Integer, db.ForeignKey('group.id'), nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
# I want everything below here encrypted
email = db.Column(db.String, nullable=False)
phone_number = db.Column(db.String, nullable=False)
street_address = db.Column(db.String)
city = db.Column(db.String)
state = db.Column(db.String)
zip_code = db.Column(db.Integer)
Я очень плохо знаком с базой данных и безопасностью баз данных. Требуется, чтобы я зашифровал столбцы email, phone_number, street_address, city, state и zipcode в таблице Post. Как бы я go зашифровал столбцы, которые я хочу зашифровать, и не позволил бы администраторам базы данных видеть его, но чтобы приложение все еще размещало сообщения на странице пользователей? Приложение позволяет пользователям группы видеть все сообщения, связанные с группой (и я хотел бы сохранить это после шифрования).
Я просмотрел эти ссылки - https://www.mssqltips.com/sqlservertip/2840/sql-server-encryption-to-block-dbas-data-access/, SQL Сервер: как ограничить доступ к зашифрованному столбцу даже из dba? , и посмотрел на модуль pgcrypto (https://www.postgresql.org/docs/9.2/pgcrypto.html) - но у меня нет Идея, как реализовать это в приложении Heroku. Любая помощь будет высоко ценится!