Как разрешить пользователю доступ только к данным, но зашифровать администраторы базы данных для доступа к данным psql в приложении Heroku Flask? - PullRequest
0 голосов
/ 03 мая 2020

У меня есть приложение 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. Любая помощь будет высоко ценится!

...