在PostgreSQL中,一个用户必须有 LOGIN权限才干登录数据库。但是,必须分配明确的权限来履行数据库操作,包含挑选表、列和记录。
PostgreSQL的GRANT查询答应你修正用户在数据库目标上的权限,如表、列、视图、函数、架构等等。
本教程将指导你运用PostgreSQL GRANT指令来修正各种数据库目标的权限。
基本用法
GRANT指令的基本语法是
GRANT privilege(s) ON object(s) TO user
在上面的语法中,你能够指定一个或多个权限来颁发用户在指定目标上的权限。
要设置一个目标上的一切权限,能够运用ALL关键字。
你能够指定在一个目标上颁发的一些权限包含。
- SELECT
- INSERT
- 更新
- DELETE
- 创立
- 衔接
- 触发器
- TRUNCATE
- 引证
- 履行
接下来,你要指定数据库目标和用户来颁发这组权限。
颁发句子示例
让咱们看一下如安在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指令来修正数据库目标上的用户权限。