PostgreSQL 中如何让某些组只能创建和编辑但不能删除(删除)表?
How to allow certain groups only to create and edit but not delete (drop) tables in PostgreSQL?
我正在使用 AWS RDS PostgreSQL 构建应用程序。
我需要允许一组使用 CREATE, INSERT INTO
和 UPDATE
语句,但同时不允许他们使用 DROP TABLE
或 DROP DATABASE
。
有没有办法在数据库层执行此操作,因为我不希望在服务器端执行此操作?谢谢。
您可以创建一个可以执行所有这些操作的特权用户 – 让我们称之为 creator
– 以及一个用于登录数据库的普通用户 luser
。
creator
然后用 SECURITY DEFINER
定义 PL/pgSQL 函数执行所需的 CREATE
语句(可能使用动态 SQL 和 EXECUTE
声明)。
然后creator
运行
REVOKE EXECUTE ON FUNCTION ... FROM PUBLIC;
GRANT EXECUTE ON FUNCTION ... TO luser;
以便luser
可以执行功能。
INSERT
和 UPDATE
权限被授予函数内部的 luser
。
文档链接:
语言PL/pgSQL 在 Postgre 中编写函数SQL
Executing dynamic statements 在 PL/pgSQL
CREATE FUNCTION
SQL 索曼德
Privileges PostgreSQL
我正在使用 AWS RDS PostgreSQL 构建应用程序。
我需要允许一组使用 CREATE, INSERT INTO
和 UPDATE
语句,但同时不允许他们使用 DROP TABLE
或 DROP DATABASE
。
有没有办法在数据库层执行此操作,因为我不希望在服务器端执行此操作?谢谢。
您可以创建一个可以执行所有这些操作的特权用户 – 让我们称之为 creator
– 以及一个用于登录数据库的普通用户 luser
。
creator
然后用 SECURITY DEFINER
定义 PL/pgSQL 函数执行所需的 CREATE
语句(可能使用动态 SQL 和 EXECUTE
声明)。
然后creator
运行
REVOKE EXECUTE ON FUNCTION ... FROM PUBLIC;
GRANT EXECUTE ON FUNCTION ... TO luser;
以便luser
可以执行功能。
INSERT
和 UPDATE
权限被授予函数内部的 luser
。
文档链接:
语言PL/pgSQL 在 Postgre 中编写函数SQL
Executing dynamic statements 在 PL/pgSQL
CREATE FUNCTION
SQL 索曼德Privileges PostgreSQL