创建PostgreSQL角色

环境

Ubuntu 20.4 是一种操作系统,而 PostgreSQL 12.4 是一种数据库管理系统。

首先

在PostgreSQL中,有两种命令可用于创建角色,分别是createuser和create user。createuser是Linux提供的PostgreSQL客户端工具命令,而create user是在登录到PostgreSQL后,在其提示符中输入的SQL语句。

在PostgreSQL中,用户和角色是同义词。严格来说,使用 createuser 命令创建的是角色,而不是用户。执行 createuser 命令实际上会发送一个 SQL 命令 create role 到后台。

如果在Linux上 PostgreSQL 提供了创建角色的命令,那么自然也会提供删除角色的命令 createorp。然而,与 alter role 相对应的 alterrole 命令却没有提供。

请参考以下链接:
https://www.postgresql.jp/document/12/html/reference-client.html

对等认证

当安装PostgreSQL时,将自动创建名为postgres的用户。postgres用户默认为超级用户。此外,在Linux中也会自动创建名为postgres的用户。

$cat /etc/passwd | grep postgres

当使用postgres用户登录到PostgreSQL时,默认会通过peer认证系统进行登录。peer认证系统的原理是,在Linux和PostgreSQL中创建一个相同用户名的用户,并利用登录到Linux的用户名来实现对PostgreSQL的登录。

只要在登录Linux时被认证,那么对于登录PostgreSQL时的认证也是一样的,如果使用相同的用户名,它将直接跳过认证并允许通过。因此,在登录PostgreSQL时不会再次询问密码。

如果您希望增强安全性,可以考虑更改认证机制。然而,我认为在开发中使用对等认证更为方便。

当您登录到PostgreSQL时,认证方法是在pg_hba.conf文件中进行设置的。当您从本地登录时,在登录到所有数据库时,将使用”postgres”用户进行peer认证。

#TYPE  DATABASE        USER            ADDRESS                 METHOD
 local all             postgres                                peer

请使用以下命令来查找pg_hab.conf的位置。

$sudo find / -name "pg_hba.conf"
/etc/postgresql/12/main/pg_hba.conf

请查阅(官方网站)
https://www.postgresql.jp/document/12/html/auth-peer.html

滾動的操作

登录到PostgreSQL。

$sudo su - postgres
#psql

显示角色列表。初始状态下只存在一个名为postgres的角色。

#\du

创建一个名为test的角色。如果没有提供参数,将不会授予任何权限。

#create user test;
#\du
                                   List of roles
 Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 test      |                                                            | {}

在创建角色时,您可以选择一起设置密码。

#create user test with password 'test'

这是用于更改或删除角色密码的命令。

#alter role postgres with password 'postgres';
#alter role postgres with password null;

您可以通过系统目录来确认权限的存在与否。

请参考以下链接:
https://www.javadrive.jp/postgresql/role/index1.html

# select * from pg_roles where rolname = 'test';

授予角色权限

在执行“创建用户”命令时,可以通过参数给予任意权限,但之后可以随时添加或删除权限。

角色更改的详细信息
https://pgsql-jp.github.io/jpug-doc/12.4/html/sql-alterrole.html

给予test用户创建数据库的权限。

#alter role test with createdb;
#du
                                  List of roles
 Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
 test      | Create DB                                                  | {}

已授予Create DB权限。然后,从test用户撤销了创建数据库的权限。

#alter role test with nocreatedb;
#du
                                   List of roles
 Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
 test      |                                                            | {}

DB的权限已被删除。

删除角色

删除角色。

#drop user test;

创建用户和创建角色的区别

在创建角色时,我们使用”create user”命令创建的是角色,而不是实际的用户。但是,”create role”命令也存在。那么,”create user”和”create role”之间有什么区别呢?实际上,无论使用哪个命令,都会创建相同的角色。然而,使用”create role”命令创建的角色默认不会被授予登录权限。如果没有授予登录权限,角色列表中将显示”Cannot login”。换句话说,即使创建了角色,也无法使用该角色登录。

#create role test4;
#\du
                                      List of roles
    Role name    |                         Attributes                         | Member of
-----------------+------------------------------------------------------------+-----------
  test4           | Cannot login                                               | {}

要授予登录权限,请按照以下方式操作即可。从角色列表中,删除了”无法登录”的字样。

#alter role test4 with login;
#\du
List of roles
    Role name    |                         Attributes                         | Member of
-----------------+------------------------------------------------------------+-----------
  test4          |                                                            | {}
bannerAds