postgresql 用户表密码字段设置不可见
时间: 2023-08-03 19:07:18 浏览: 179
在 PostgreSQL 中,你可以使用 `md5` 或 `scrama-256` 等哈希算法来存储密码,以保证密码字段的安全性。这样,即使数据库被未经授权的人访问,也无法直接获取到用户的密码。
以下是使用 `md5` 哈希算法来存储密码的示例:
1. 创建用户表:
```sql
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(32) NOT NULL
);
```
2. 插入用户数据时,将密码进行哈希处理:
```sql
INSERT INTO users (username, password)
VALUES ('john', md5('password123'));
```
3. 验证用户时,将输入的密码与存储的哈希值进行比较:
```sql
SELECT * FROM users
WHERE username = 'john' AND password = md5('password123');
```
请注意,`md5` 算法已经不再被视为安全的密码哈希算法,因为它容易受到彩虹表攻击。为了增加密码的安全性,建议使用更强大的哈希算法,如 `scram-sha-256`。
以下是使用 `scram-sha-256` 哈希算法来存储密码的示例:
1. 创建用户表:
```sql
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password BYTEA NOT NULL,
salt BYTEA NOT NULL
);
```
2. 插入用户数据时,使用 `scram-sha-256` 算法生成哈希值和盐:
```sql
INSERT INTO users (username, password, salt)
VALUES ('john', gen_random_uuid(), gen_random_uuid());
```
3. 验证用户时,使用 `scram-sha-256` 算法验证密码:
```sql
SELECT * FROM users
WHERE username = 'john' AND password = 'hashed_password';
```
在这个示例中,密码字段被定义为 `BYTEA` 类型,存储哈希值。`salt` 字段用于增加密码的安全性。
无论使用哪种哈希算法,通过将密码进行哈希处理,可以保护用户密码的安全性,并使其在数据库中不可见。
阅读全文