문제

읽다 암호화를 수행하는 데이터 타입이있어 비밀번호가 데이터베이스에 보안됩니다.

나는 지금 사용합니다 varchar 비밀번호를 저장합니다. 어떻게 든 SHA-512 기능을 암호에 적용하고 일반 텍스트 비밀번호가 제거되도록 해당 데이터를 어딘가에 넣어야한다는 생각이있었습니다.

그러나 Perl의 데이터 유형은 PostgreSQL에 Varchar보다 더 나은 방법이 있음을 시사합니다.

PostgreSQL의 비밀번호의 데이터 타입은 무엇입니까?

도움이 되었습니까?

해결책

Jeff는 좋은 기사를 가지고 있습니다 아마도 암호를 잘못 저장하고있을 것입니다. 이 기사에서는 데이터베이스에 암호를 저장하는 다양한 방법과 실행할 수있는 일반적인 함정 중 일부에 대해 설명합니다. 특히, 해싱 알고리즘, 레인보우 테이블 및 "소금"의 사용에 대해 논의하여 손상된 비밀번호 파일의 위험을 줄입니다.

사용 varchar 데이터 유형은 적절한 해시 비밀번호를 저장하는 데 완벽하게 적합합니다. 예를 들어 다음은 프로덕션 데이터베이스의 실제 계정 레코드의 일부입니다.

=> select account_id, email, salt, passhash from account where email = 'greg@hewgill.com';
 account_id |      email       |       salt       |                 passhash                 
------------+------------------+------------------+------------------------------------------
          1 | greg@hewgill.com | GFR9uT4N4Tzl3vnK | 2c2bf00079a6d49a8f7fb17cefb52fdb41a4b043
(1 row)

이 경우 passhash 내 비밀번호와 관련된 소금의 SHA-1의 16 진수 표현입니다.

다른 팁

"CHKPASS 모듈"설치

이 모듈은 암호화 된 암호를 저장하도록 설계된 데이터 유형 Chkpass를 구현합니다. PostgreSQL Contrib 패키지를 설치하고 확장 명령을 실행하여 설치해야합니다.

Ubuntu 12.04에서는 다음과 같습니다.

sudo apt-get install postgresql-contrib

PostgreSQL 서버를 다시 시작하십시오.

sudo /etc/init.d/postgresql restart

사용 가능한 모든 연장은 다음과 같습니다.

/opt/PostgreSQL/9.5/share/postgresql/extension/

이제 Create Extension 명령을 실행할 수 있습니다.

예시:

CREATE EXTENSION chkpass;

CREATE TABLE accounts (username varchar(100), password chkpass);
INSERT INTO accounts(username, "password") VALUES ('user1', 'pass1');
INSERT INTO accounts(username, "password") VALUES ('user2', 'pass2');

select * from accounts where password='pass2';

보고

username | password
---------------------------
"user2"  | ":Sy8pO3795PW/k"

Postgres 버전 9.4+는 다음과 같이 설명한대로 Pgcrypto 확장을 사용하여 더 똑똑하고 안전한 방식으로이를 수행 할 수 있습니다. http://www.meetspaceapp.com/2016/04/12/passwords-postgresql-pgcrypto.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top