001package io.ebean.config.dbplatform.sqlserver; 002 003import io.ebean.config.dbplatform.AbstractDbEncrypt; 004import io.ebean.config.dbplatform.DbEncryptFunction; 005 006/** 007 * SQL Server EncryptByPassPhrase DecryptByPassPhrase based encryption support. 008 */ 009public class SqlServerDbEncrypt extends AbstractDbEncrypt { 010 011 public SqlServerDbEncrypt() { 012 this.varcharEncryptFunction = new VarcharFunction(); 013 this.dateEncryptFunction = new DateFunction(); 014 } 015 016 @Override 017 public boolean isBindEncryptDataFirst() { 018 return false; 019 } 020 021 private static class VarcharFunction implements DbEncryptFunction { 022 023 @Override 024 public String getDecryptSql(String columnWithTableAlias) { 025 return "convert(nvarchar,DecryptByPassPhrase(?," + columnWithTableAlias + "))"; 026 } 027 028 @Override 029 public String getEncryptBindSql() { 030 return "EncryptByPassPhrase(?,?)"; 031 } 032 } 033 034 private static class DateFunction implements DbEncryptFunction { 035 036 @Override 037 public String getDecryptSql(String columnWithTableAlias) { 038 return "cast(convert(nvarchar,DecryptByPassPhrase(?," + columnWithTableAlias + ")) as date)"; 039 } 040 041 @Override 042 public String getEncryptBindSql() { 043 return "EncryptByPassPhrase(?,format(?,'yyyy-MM-dd'))"; 044 } 045 } 046}