使用PostgreSQL GRANT命令来修改各种数据库对象的权限

在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命令来修改数据库对象上的用户权限。

猜你喜欢

转载自juejin.im/post/7125728748283887624