在 PostgreSQL 中,可以通过 SQL 命令和 psql 命令行工具进行用户管理操作。以下是一些常见的 PostgreSQL 用户管理操作:
1. 查询用户:
\du
2. 创建用户:
可以使用 CREATE ROLE
命令创建新用户,语法如下:
CREATE ROLE username WITH LOGIN PASSWORD 'password';
如:
CREATE ROLE jinjin WITH LOGIN PASSWORD 'jinjin';
或:注意使用role,默认是不带登录的权限的
CREATE user jinjin WITH LOGIN PASSWORD 'jinjin';
其中,username
是要创建的用户名,password
是用户的登录密码。如果要创建的用户只需要登录而不需要创建对象或执行其他管理操作,则可以省略 WITH LOGIN
部分。
3. 修改用户密码:
可以使用 ALTER ROLE
命令修改用户密码,语法如下:
ALTER ROLE username WITH PASSWORD 'new_password';
其中,username
是要修改密码的用户名,new_password
是新密码。
4. 删除用户:
可以使用 DROP ROLE
命令删除用户,语法如下:
DROP ROLE username;
其中,username
是要删除的用户名。
注:如果无法删除,需要先撤销用户的所有权限才能进行删除;
5. 授权用户:
可以使用 GRANT
命令为用户授权,语法如下:
GRANT privilege_name ON object_name TO username;
如:
# 授权数据库
grant all privileges on database mydata to jinjin;
# 授权表权限(需要管理员进入数据库进行授权)
grant all privileges on all tables in schema public to jinjin;
其中,privilege_name
是要授予的权限名称(如 SELECT、INSERT、UPDATE 等),object_name
是要授予权限的对象名称(如表、视图等),username
是被授权的用户名。
6. 撤销用户权限:
可以使用 REVOKE
命令撤销用户的权限,语法如下:
REVOKE privilege_name ON object_name FROM username;
如:
# 撤销数据库权限
revoke all privileges on database mydata from jinjin;
# 撤销表权限
revoke all privileges on all tables in schema public from jinjin;
其中,privilege_name
、object_name
和 username
的含义与 GRANT
命令相同。
7. 角色属性
在 PostgreSQL 中,角色(role)可以具有各种属性,这些属性定义了角色的特征和行为。以下是一些常见的角色属性:
- 登录权限(LOGIN):允许角色登录到数据库。
- 超级用户权限(SUPERUSER):赋予角色超级用户权限,使其可以执行任何操作,包括修改系统表。
- 创建数据库权限(CREATEDB):允许角色创建新的数据库。
- 创建角色权限(CREATEROLE):允许角色创建新的数据库角色。
- 创建临时表权限(TEMPORARY):允许角色创建临时表。
- 连接限制(CONNECTION LIMIT):限制角色同时连接到数据库的最大数量。
- 继承权限(INHERIT):允许角色继承其他角色的权限。
- 授权权限(GRANT):允许角色授权给其他角色权限。
- 修改其他角色权限(ALTER ANY ROLE):允许角色修改其他角色的属性。
- 删除其他角色权限(DROP ANY ROLE):允许角色删除其他角色。
- 超时限制(PASSWORD EXPIRY):设置角色密码的过期时间。
- 加密方式(ENCRYPTED):指定角色密码是否加密存储。
这些属性可以单独设置或组合使用,以满足不同的安全需求和角色权限管理。通过适当配置角色属性,可以确保数据库的安全性和权限控制。
8. Role和user解析
以创建角色为例:
在 PostgreSQL 中,CREATE ROLE
和 CREATE USER
实际上是同义的,都用于创建数据库角色(用户)。它们的区别在于语法的不同以及默认的行为。
- 使用
CREATE ROLE
创建角色:
CREATE ROLE jinjin WITH LOGIN PASSWORD 'jinjin';
- 使用
CREATE USER
创建用户:
CREATE USER jinjin WITH LOGIN PASSWORD 'jinjin';
这两个命令在功能上是等效的,都用于创建一个名为 “jinjin” 的登录用户,并为该用户设置密码为 “jinjin”。
然而,值得注意的是,在 PostgreSQL 中,CREATE ROLE
更为通用,它既可以创建普通用户角色,也可以创建其他类型的角色,如超级用户、数据库用户、组等。而 CREATE USER
在语法上更加简洁,它默认创建一个具有登录权限的普通用户角色。
因此,如果你只是想创建一个具有登录权限的普通用户,可以使用 CREATE USER
命令,它更为直观和简洁。而如果你需要创建其他类型的角色,或者想要明确指定角色的属性,那么可以使用 CREATE ROLE
命令。