具有使用权限的Postgres角色,但不是DELETE

时间:2017-06-19 07:06:27

标签: postgresql

我有一个postgres实例,其用户root具有完全管理员权限。

我有两个数据库db1和db2。

对于每个数据库,我希望有两个用户dbN_user和dbN_admin。 dbN_user将由我的应用程序使用,dbN_admin将用于更改表结构的迁移。

应用程序永远不会删除任何行,我希望使用用户权限强制执行该行。

db1_user应该能够连接到db1,并且能够SELECTINSERTUPDATE,而不能DELETE

db1_admin应具有DELETECREATE TABLEALTER TABLE的其他权限。

要设置此内容的SQL语句是什么?

2 个答案:

答案 0 :(得分:2)

dbN_admin将是对象的所有者,因此用户将自动拥有所有权限。

您需要GRANT dbN_user对表和其他对象本身的权限,而不是数据库。

只需在填充数据库的SQL脚本中的GRANT语句后添加正确的CREATE TABLE语句。 您需要GRANT USAGE对包含dbN_user对象的架构的ALTER DEFAULT PRIVILEGES FOR dbN_admin GRANT SELECT, INSERT, UPDATE ON TABLES TO dbN_user; 权限。

可以在数据库中定义默认权限

dbN_admin

这将在ALTER DEFAULT PRIVILEGES创建新表时自动授予权限(但不会影响在#!/bin/bash DB_NAME=demo DB_TABLE=customer sqlite3 $DB_NAME << EOF DROP TABLE IF EXISTS $DB_TABLE; CREATE TABLE $DB_TABLE ( "Customer_id" INTEGER PRIMARY KEY AUTOINCREMENT, "Customer_name" TEXT NOT NULL,"Domain_name" VARCHAR(25) NOT NULL,"Status" TEXT NOT NULL ); INSERT INTO $DB_TABLE(Customer_name,Domain_name,Status) VALUES ("A","A.com","active"); INSERT INTO $DB_TABLE (Customer_name,Domain_name,Status) VALUES ( "B","B.tv","active"); INSERT INTO $DB_TABLE (Customer_name,Domain_name,Status) VALUES ( "C","C.com","active"); INSERT INTO $DB_TABLE (Customer_name,Domain_name,Status) VALUES ( "D","D.org","active"); Select * from $DB_TABLE; EOF 命令之前创建的表)。

答案 1 :(得分:0)

管理员:

create user db1_user;
grant CONNECT ON DATABASE db1 to db1_user; --only if you have restricted connections on db previously
grant usage on schema app_relations to db1_user;
grant select,insert,update on all tables in schema app_relations to db1_user;

应用程式:

Happy