SQL进行AES加解密:
MySQL:
自带有加解密模块因此可以直接调用:
--加密
SELECT lower(HEX(AES_ENCRYPT('511901197901010619','personalKey'))) as number;
--解密
SELECT AES_DECRYPT(UNHEX(upper('76c4f945ce742e98bd2a003aa6d3f2f9e9af6e07bbc90f10d117f4b019f01e58')),'personalKey');
PostgreSQL:
本身没有相关函数进行加解密,但在9.6版本后,可以通过安装插件以支持加解密功能
-
首先看当前支持的插件列表插件
select * from pg_available_extensions ORDER BY name desc;
看看当前插件列表中是否有:pgcrypto
插件 -
如果有,可以进行安装(需要管理员身份)
create extension pgcrypto;
-
进行加解密调用
加密:
SELECT encode(encrypt('511901197901010619', 'personalKey', 'aes-ecb/pad:pkcs'),'HEX');
--注:
-- encode()方法代表加密后使用编码方式,推荐HEX或Base64
-- encrypt代表加密调用,第一个参数代表要加密的数据,第二个代表key即盐值,第三个代表使用的加密方式,这里使用aes加密,ecb/pad:pkcs加密模式
解密:
SELECT encode(decrypt(decode('76c4f945ce742e98bd2a003aa6d3f2f9e9af6e07bbc90f10d117f4b019f01e58','HEX'), 'personalKey', 'aes-ecb/pad:pkcs'), 'escape');
--注:
-- decrypt()方法解密后需要再次以escape格式进行编码(起码笔者这里需要)
递归查询部门下面所有的子部门,并给每个部门进行层级编码
- 表结构:id, code, parent_code, name.....
- SQL如下,使用递归查询
with RECURSIVE tt
as (
select t.name, t.code, t.parent_code, 1::INTEGER as lev
from department_info t where t.code = '4'
union all
SELECT d.name, d.code, d.parent_code, tt.lev + 1 as lev
from department_info d inner join tt on d.parent_code = tt.code
)
select * from tt