PostgreSQL - PRIVILEGES(权限)

  • 简述

    每当在数据库中创建对象时,都会为其分配所有者。所有者通常是执行创建语句的人。对于大多数类型的对象,初始状态是只有所有者(或超级用户)才能修改或删除对象。要允许其他角色或用户使用它,必须授予特权或权限。
    PostgreSQL 中的不同类型的特权是 -
    • SELECT,
    • INSERT,
    • UPDATE,
    • DELETE,
    • TRUNCATE,
    • REFERENCES,
    • TRIGGER,
    • CREATE,
    • CONNECT,
    • TEMPORARY,
    • EXECUTE, and
    • USAGE
    根据对象的类型(表、函数等),将权限应用于对象。要为用户分配权限,请使用 GRANT 命令。
  • GRANT 的语法

    GRANT 命令的基本语法如下 -
    
    GRANT privilege [, ...]
    ON object [, ...]
    TO { PUBLIC | GROUP group | username }
    
    • privilege- 值可以是:SELECT、INSERT、UPDATE、DELETE、RULE、ALL。
    • object− 授予访问权限的对象的名称。可能的对象有:表、视图、序列
    • PUBLIC− 代表所有用户的简短形式。
    • group− 授予权限的组。
    • username− 授予权限的用户的名称。PUBLIC 是代表所有用户的简写形式。
    可以使用 REVOKE 命令撤销权限。
  • REVOKE 的语法

    REVOKE 命令的基本语法如下:
    
    REVOKE privilege [, ...]
    ON object [, ...]
    FROM { PUBLIC | GROUP groupname | username }
    
    • privilege- 值可以是:SELECT、INSERT、UPDATE、DELETE、RULE、ALL。
    • object− 授予访问权限的对象的名称。可能的对象有:表、视图、序列
    • PUBLIC− 代表所有用户的简短形式。
    • 团体group− 授予权限的组。
    • username− 授予权限的用户的名称。PUBLIC 是代表所有用户的简写形式。
  • 例子

    要了解权限,让我们首先创建一个用户,如下所示 -
    
    testdb=# CREATE USER manisha WITH PASSWORD 'password';
    CREATE ROLE
    
    消息 CREATE ROLE 表示创建了用户“manisha”。
    考虑具有以下记录的表 COMPANY -
    
    testdb# select * from COMPANY;
     id | name  | age | address   | salary
    ----+-------+-----+-----------+--------
      1 | Paul  |  32 | California|  20000
      2 | Allen |  25 | Texas     |  15000
      3 | Teddy |  23 | Norway    |  20000
      4 | Mark  |  25 | Rich-Mond |  65000
      5 | David |  27 | Texas     |  85000
      6 | Kim   |  22 | South-Hall|  45000
      7 | James |  24 | Houston   |  10000
    (7 rows)
    
    接下来,让我们将表 COMPANY 上的所有权限授予用户“manisha”,如下所示 -
    
    testdb=# GRANT ALL ON COMPANY TO manisha;
    GRANT
    
    消息 GRANT 表示所有权限都分配给了 USER。
    接下来,让我们撤销用户“manisha”的权限,如下所示 -
    
    testdb=# REVOKE ALL ON COMPANY FROM manisha;
    REVOKE
    
    消息 REVOKE 表示从 USER 撤销所有权限。
    您甚至可以按如下方式删除用户 -
    
    testdb=# DROP USER manisha;
    DROP ROLE
    
    消息 DROP ROLE 表示 USER 'Manisha' 已从数据库中删除。