我有一个postgres实例,其用户root具有完全管理员权限。
我有两个数据库db1和db2。
对于每个数据库,我希望有两个用户dbN_user和dbN_admin。 dbN_user将由我的应用程序使用,dbN_admin将用于更改表结构的迁移。
应用程序永远不会删除任何行,我希望使用用户权限强制执行该行。
db1_user应该能够连接到db1,并且能够SELECT
,INSERT
和UPDATE
,而不能DELETE
。
db1_admin应具有DELETE
,CREATE TABLE
,ALTER TABLE
的其他权限。
要设置此内容的SQL语句是什么?
答案 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