Play2.5 + mariadb + Ebean으로 DB 암호화

DB 암호화 유형


  • 열 암호화
    열별 암호화
    Ebean에서는 이쪽 밖에 할 수 없는 모습
  • 테이블 암호화
    테이블당 암호화
    이 기능은 mariadb에 표준으로 붙어 있지만, 아마 Play나 Ebean에서는 조작할 수 없다
  • DB가있는 HDD 자체를 암호화
    ! ?

  • 모든 코드



    사전 설정



    conf/application.conf



    일부 발췌

    application.conf
    db {
      # You can declare as many datasources as you want.
      # By convention, the default datasource is named `default`
    
      # https://www.playframework.com/documentation/latest/Developing-with-the-H2-Database
      default.driver = org.mariadb.jdbc.Driver
      default.url = "jdbc:mariadb://localhost:3306/playdb"
      default.username = play
      default.password = "play"
    
      # You can turn on SQL logging for any datasource
      # https://www.playframework.com/documentation/latest/Highlights25#Logging-SQL-statements
      #default.logSql=true
    }
    
    ebean {
      default = ["models.entity.*"]
    }
    

    build.sbt



    build.sbt
    name := """encryptdb"""
    
    version := "1.0-SNAPSHOT"
    
    lazy val root = (project in file(".")).enablePlugins(PlayJava, PlayEbean)
    
    scalaVersion := "2.11.7"
    
    libraryDependencies ++= Seq(
      javaJdbc,
      cache,
      javaWs,
      "org.mariadb.jdbc" % "mariadb-java-client" % "1.4.4"
    )
    

    project/plugins.sbt



    다음을 추가
    addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "3.0.0")

    conf/ebean.properties



    새로 만들고 다음을 쓰고 아래에 설명 된 BasicEncryptKeyManager의 위치를 ​​지정합니다.
    encryptKeyManager = models.security.BasicEncryptKeyManager
    

    encryptKeyManager = "models.security.BasicEncryptKeyManager"
    그리고 더블 쿼트로 둘러싸면 움직이지 않으므로주의

    암호화 준비



    models.entity



    @Encrypted이있는 열이 암호화됨

    User.java
    package models.entity;
    
    import com.avaje.ebean.annotation.Encrypted;
    
    import javax.persistence.Entity;
    
    /**
     * ユーザー情報
     *
     * @author
     *
     */
    @Entity
    public class User extends BaseEntity {
    
        /* ユーザー名 */
        @Encrypted
        public String name;
    
        /* メールアドレス */
        @Encrypted
        public String mail;
    
        /* パスワード */
        @Encrypted
        public String password;
    
        public static Finder<Long, User> finder = new Finder<Long, User>(User.class);
    
    }
    

    조류에서 ls. 키 크리티



    BasicEncryptKeyManager



    BasicEncryptKeyManager
    package models.security;
    
    
    import com.avaje.ebean.config.EncryptKey;
    import com.avaje.ebean.config.EncryptKeyManager;
    
    public class BasicEncryptKeyManager implements EncryptKeyManager {
    
        @Override
        public EncryptKey getEncryptKey(String tableName, String columnName) {
            return new CustomEncryptKey(tableName, columnName);
        }
    
        @Override
        public void initialise() {
            // Do nothing (yet)
        }
    
    }
    

    CustomEncryptKey



    CustomEncryptKey
    package models.security;
    
    import com.avaje.ebean.config.EncryptKey;
    
    public class CustomEncryptKey implements EncryptKey {
    
        private String tableName;
    
        private String columnName;
    
        public CustomEncryptKey(String tableName, String columnName) {
            this.tableName = tableName;
            this.columnName = columnName;
        }
    
        @Override
        public String getStringValue() {
            return play.Configuration.root().getString("application.secret") + "::" + this.tableName
                    + "::" + this.columnName;
        }
    }
    

    확인



    상기까지 준비는 종료

    mariadb에 붙어 온 HeidiSQL로 확인해 본다

    HeidiSQL





    보이지 않는다!

    참고



    htps //w w.ぁ yf 라메를 rk. 코m/도쿠멘 타치온/2.5. x / 그럼 에베안
    htps : // 아 r ゔ ぇ - ゔ ぁ ぇ - rg. 기주 b. 이오 / 에베안 / 엔 크립 치온. HTML
    h tp : / / s tac ゔ ぇ rf ぉ w. 코 m / 쿠에 s 치온 s / 15800453 / p ぁ y-f 라메 rk 2-1- ゔ ぁ 에베 앤 - cryp d

    좋은 웹페이지 즐겨찾기