PostgreSQL 9.6.2 문서 | |||
---|---|---|---|
이전 | 위로 | 장 18. 서버 설정 및 운용 | 다음 |
PostgreSQL은 데이터베이스 서버 도난, 비양심적인 관리자 및 불안정한 네트워크로 인해 데이터가 공개되지 않도록 보호하는 데 있어 몇 가지 단계의 암호화와 유연성을 제공한다. 또한 암호화는 의료 기록 또는 금융 트랜잭션 같은 중요 데이터의 보호를 위해서도 필요하다.
기본적으로 데이터베이스 사용자 패스워드는 MD5 해시로 저장되므로 사용자에게 할당된 실제 패스워드를 관리자가 판단할 수 없다. 클라이언트 인증에 MD5 암호화를 사용하는 경우, 네트워크를 통해 전송하기 전에 클라이언트가 MD5 암호화를 실행하므로 잠시라도 암호화되지 않는 패스워드가 서버에 제공되지 않는다.
pgcrypto 모듈은 특정 필드를 암호화해서 저장하는 것을 허용한다. 일부 데이터만 중요한 경우에 이것이 유용하다. 클라이언트가 암호 해독 키를 제공하고 데이터가 서버에서 암호 해독된 다음, 클라이언트로 전송된다.
암호 해독된 데이터 및 암호 해독 키는 암호가 해독되고 클라이언트와 서버 간에 통신이 일어나는 짧은 시간 동안 서버에 제공된다. 여기에는 시스템 관리자처럼 데이터베이스 서버에 대한 전체 액세스 권한이 있는 누군가가 데이터와 키를 가로챌 수 있는 짧은 순간이 존재한다.
스토리지 암호화는 파일 시스템 레벨 또는 블록 레벨에서 수행된다. Linux 파일 시스템 암호화 옵션에는 eCryptfs 및 EncFS가 포함되는 반면, FreeBSD는 PEFS를 사용한다. 블록 레벨 또는 풀 디스크 암호화 옵션에는, Linux에서는 dm-crypt + LUKS가 포함되고 FreeBSD에서는 GEOM 모듈 geli 및 gbde가 포함된다. Windows를 비롯한 여러 가지 다른 운영 체제에서 이 기능이 지원된다.
드라이브 또는 전제 컴퓨터가 도난 당한 경우 이 메커니즘은 암호화되지 않은 데이터를 드라이브에서 읽지 못하게 한다. 파일 시스템이 마운트될 때 운영 체제가 암호화되지 않은 데이터 뷰를 제공하므로 파일 시스템이 마운트된 상태에서는 공격으로부터 데이터를 보호하지 못한다. 그러나, 파일 시스템을 마운트하려면 암호화 키를 운영 체제에 전달하는 방법이 필요하며, 디스크를 마운트하는 호스트 어딘가에 키를 저장해야 할 때도 있다.
MD5 인증 방법은 서버로 전송하기 전에 클라이언트에서 패스워드를 이중으로 암호화한다. 데이터베이스가 연결되면 이것은 먼저 사용자 이름을 기준으로 MD5 암호화한 다음, 서버에 의해 전송되는 랜덤 salt를 기준으로 암호화된다. 이것이 네트워크를 통해 서버에 전송되는 이중 암호화된 값이다. 이중 암호화는 패스워드 검색을 방지하는 것 외에도, 동일한 암호화된 패스워드를 사용하여 나중에 데이터베이스 서버에 연결하는 새로운 연결도 방지한다.
SSL 연결은 네트워크로 전송된 모든 데이터(패스워드, 쿼리 및 리턴 데이터)를 암호화한다. pg_hba.conf 파일은 어떤 호스트가 암호화되지 않은 연결을 사용할 수 있는지(host) 및 어떤 것이 SSL-암호화된 연결을 요구하는지(hostssl)를 관리자가 지정할 수 있게 한다. 또한 클라이언트는 SSL을 통해서만 서버에 연결하도록 지정 가능하다. Stunnel 또는 SSH는 전송을 암호화할 때에도 사용할 수 있다.
이것은 클라이언트 및 서버 양쪽에서 서로 간에 SSL 인증서를 제공하는 것이 가능하다. 양쪽에서 추가적인 설정이 일부 필요하지만 이로써 단순히 패스워드만 사용하는 것보다 훨씬 강력한 ID 검증이 가능하다. 이것은 클라이언트가 보낸 패스워드를 읽는 데 필요한 시간만큼 컴퓨터가 서버인 척하는 것을 방지한다. 또한 클라이언트와 서버 사이에 있는 컴퓨터가 서버인 척 해서 클라이언트와 서버 사이의 모든 데이터를 읽고 전달하는 "중간자(man in the middle)" 공격을 방지하는 데에도 효과가 있다.
서버 머신의 시스템 관리자를 신뢰할 수 없는 경우 클라이언트가 데이터를 암호화해야 한다. 이러한 방식으로 암호화되지 않은 데이터를 데이터베이스 서버에 절대 나타나지 않는다. 데이터는 서버로 전송되기 전에 클라이언트에서 암호화되고 데이터베이스 결과는 사용 전에 클라이언트에서 암호가 해독되어야 한다.