在 Azure SQL Database for PostgreSQL 中授予权限

已完成

若要允许用户有权访问托管在 Azure Database for PostgreSQL 服务器上的数据库,必须创建角色(用户)并授予或拒绝提供对数据库对象的访问权限。

在 Azure Database for PostgreSQL 中创建数据库用户

  1. 在 Azure Data Studio(或首选客户端工具)中,使用管理员登录凭据连接到 Azure Database for PostgreSQL 服务器。

  2. 将相关数据库作为当前数据库,使用 CREATE ROLE 和相关选项来创建新角色(用户)。

  3. 以下列查询为例:

    1. 创建一个名为 testdb 的新数据库。
    2. 创建具有强密码的新用户。
    3. 向 testdb 数据库授予连接特权。
    CREATE DATABASE testdb;
    CREATE ROLE <db_user> WITH LOGIN NOSUPERUSER INHERIT CREATEDB NOCREATEROLE NOREPLICATION PASSWORD '<StrongPassword!>';
    GRANT CONNECT ON DATABASE testdb TO <db_user>;
    

    若要尝试查询,可以将占位符替换为用户信息。

  4. 然后,你可以向数据库中的对象授予更多特权。 例如:

    GRANT SELECT ON ALL TABLES IN SCHEMA <schema_name> TO <db_user>;
    

CREATE ROLE 的语法为:

CREATE ROLE name [ [ WITH ] option [ ... ] ]

WHERE 选项可以是:

SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
| CREATEROLE | NOCREATEROLE
| INHERIT | NOINHERIT
| LOGIN | NOLOGIN
| REPLICATION | NOREPLICATION
| BYPASSRLS | NOBYPASSRLS
| CONNECTION LIMIT connlimit
| [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL
| VALID UNTIL 'timestamp'
| IN ROLE role_name [, ...]
| ROLE role_name [, ...]
| ADMIN role_name [, ...]

可选参数为:

  • SUPERUSER | NOSUPERUSER - 无法在 Azure Database for PostgreSQL 中分配 SUPERUSER 特权。 如果未指定,则 NOSUPERUSER 是默认值。
  • CREATEDB | NOCREATEDB - 角色是否可以创建数据库。 默认值为 NOCREATEDB。
  • CREATEROLE | NOCREATEROLE - 角色是否可以创建新角色,即执行 CREATE ROLE。 如果授予 CREATEROLE 特权,则角色也可以更改和删除其他角色。 NOCREATEROLE 是默认值。
  • INHERIT | NOINHERIT - 角色是否继承其为直接或间接成员的角色的特权。 INHERIT 是默认值。
  • LOGIN | NOLOGIN - 是否允许角色登录。 具有 LOGIN 属性的角色是数据库用户。 没有 LOGIN 属性的角色可用于管理数据库特权。 NOLOGIN 是默认值。
  • REPLICATION | NOREPLICATION - 角色是否为复制角色。 角色必须具有此属性才能在复制模式下连接到服务器,并创建或删除复制槽。 REPLICATION 属性是一个只应用于复制的特权角色。 NOREPLICATION 是默认值。 必须是 azure_pg_admin 的成员才能创建此角色。
  • BYPASSRLS | NOBYPASSRLS - 角色是否绕过每个行级别安全性 (RLS) 策略。
  • CONNECTION LIMIT connlimit - 指定可登录角色能够建立的并发连接数量。 -1 是默认值。 此参数不会对并发连接施加限制。
  • [ ENCRYPTED ] PASSWORD 'password'| PASSWORD NULL - 设置角色的密码。 密码仅由具有 LOGIN 属性的角色使用。 如果未指定密码,则密码为 NULL,密码身份验证会失败。 或者,显式状态为 PASSWORD NULL。
  • VALID UNTIL ‘timestamp’- 角色密码不再有效的日期和时间。 如果省略此项,密码将没有时间限制。
  • IN ROLE role_name - 将新角色作为新成员添加到的一个或多个角色。 没有将新角色添加为管理员的选项;请使用 GRANT 命令。
  • IN GROUP role_name IN ROLE 的过时替代项。
  • ROLE role_name - 将一个或多个角色添加为新角色的成员。 (此更改实际上使新角色成为一个“组”。)
  • ADMIN role_name - ADMIN 子句类似于 ROLE,但命名角色将添加到新角色 WITH ADMIN OPTION,从而赋予相应权限,使他们能够将这个角色的成员资格授予其他人。

注意

可以使用 ALTER ROLE 更改角色属性,也可以使用 DROP ROLE 删除角色。