在PostgreSQL中,一个用户必须有 LOGIN权限才干登录数据库。但是,必须分配明确的权限来履行数据库操作,包含挑选表、列和记录。

PostgreSQL的GRANT查询答应你修正用户在数据库目标上的权限,如表、列、视图、函数、架构等等。

本教程将指导你运用PostgreSQL GRANT指令来修正各种数据库目标的权限。

基本用法

GRANT指令的基本语法是

GRANT privilege(s) ON object(s) TO user

在上面的语法中,你能够指定一个或多个权限来颁发用户在指定目标上的权限。

要设置一个目标上的一切权限,能够运用ALL关键字。

你能够指定在一个目标上颁发的一些权限包含。

  1. SELECT
  2. INSERT
  3. 更新
  4. DELETE
  5. 创立
  6. 衔接
  7. 触发器
  8. TRUNCATE
  9. 引证
  10. 履行

接下来,你要指定数据库目标和用户来颁发这组权限。

颁发句子示例

让咱们看一下如安在PostgreSQL数据库中运用GRANT查询的几个比如。

首要,创立一个没有权限的本地用户。要做到这一点,请确保你以管理员用户的身份登录。

psql -U postgres
CREATE ROLE mods LOGIN PASSWORD 'hello';

在下一步,创立一个样本数据库和表,咱们将用它来说明PostgreSQL的权限。

下面是一个示例查询。

DROP DATABASE IF EXISTS privs;
CREATE DATABASE privs;
\c privs;
CREATE TABLE modify (id SERIAL, username VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, amount INT, PRIMARY KEY(id));

最后,退出Postgres用户,以咱们上面刚创立的用户身份登录。在上面的比如中,运用以下指令。

psql -U mods -d privs;

例1

如果你试图从privs数据库的modify表中挑选数值,你会得到一个权限回绝的过错。

比如说

privs=> select * from modify;
ERROR:  permission denied for table modify

你能够经过颁发mods用户一切权限或添加挑选权限来解决这个过错。

要做到这一点,请以Postgres用户的身份登录。

psql -U postgres -d privs;
GRANT SELECT ON modify TO mods;

这答应mods用户从privs数据库的modify表中挑选项目。

一旦你运行select句子,你应该得到如下成果。

privs=# SELECT * FROM modify;
id | username | email | amount
----+----------+-------+--------
(0 rows)

例2

你也能够一次指定多个权限。例如,要指定SELECT、INSERT、DELETE和TRUNCATE的权限,运用指令。

GRANT SELECT, INSERT, DELETE, TRUNCATE ON modify TO mods;

例3

要颁发一个用户一切权限,请将权限设置为ALL,如下面的指令示例所示。

GRANT ALL ON modify TO mods;

例4

在上面的一切比如中,咱们只在一个特定的表上给一个用户分配了权限。如果要对指定形式的一切表颁发权限,咱们能够运用指令。

GRANT SELECT, INSERT, DELETE, TRUNCATE ON ALL TABLES IN SCHEMA "privs" TO mods;

例5

你也能够将一个衔接权限GRANT给一个特定的用户,让他进入一个特定的数据库。查询方式是

GRANT CONNECT ON DATABASE privs TO mods;

要撤销颁发一个用户的一切权限,能够运用REVOKE查询。

REVOKE SELECT, INSERT, DELETE, TRUNCATE ON modify FROM mods;

结束

正如本攻略所显示的,PostgreSQL答应你运用GRANT和REVOKE指令来修正数据库目标上的用户权限。