JPA和SQL Server列加密
问题描述:
我正在使用基于OpenJPA的WebSphere 7及其JPA 2.0实现,并且我有一些让我发疯的东西。我必须连接到使用数据库列加密的SQL Server 2008数据库。加密是由几个数据库命令完成:JPA和SQL Server列加密
1 - OPEN对称密钥解密通过认证
2 - 使用数据库的方法EncryptByKey的或DecryptByKey这个
3执行插入/选择/更新/等 - CLOSE对称键
我已经搜索,并没有出现OpenJPA支持此功能。有人知道如何让OpenJPA与这种类型的加密很好地发挥作用吗?或者我应该跳过这个项目的JPA并使用良好的老式PreparedStatements?
答
所以是的,它看起来像做本机查询是唯一的方法来做到这一点。所以它会出现这样的事情:
EntityManager em = getEntityManager();
Query openKey = em.createNativeQuery("OPEN SYMMETRIC KEY MY_KEY DECRYPTION BY CERTIFICATE MY_CERT");
openKey.executeUpdate();
Query query = em.createNativeQuery("SELECT FIRSTNAME, LASTNAME, CONVERT(varchar, DECRYPTBYKEY(SSN)) as SSN from report where record_id = ?", Report.class);
query.setParameter(1, recordId);
report = (Report) query.getSingleResult();
Query closeKey = em.createNativeQuery("CLOSE SYMMETRIC KEY MY_KEY");
closeKey.executeUpdate();