PostgreSQL 中 SQL Server 的 db_datareader/db_datawriter 相当于什么?

Mar*_*own 2 postgresql permissions role

我正在将应用程序从 SQL Server 移植到 PostgreSQL。其中大部分很简单,因为应用程序只真正执行简单的选择、插入和更新。但是我需要创建一个用户来访问数据库。SQL Sever 代码像这样创建它的用户:

USE [master] CREATE LOGIN [ExampleUserName] WITH PASSWORD = 'ExamplePassword', CHECK_EXPIRATION=OFF, CHECK_POLICY=ON;
USE [ExampleDB];
CREATE USER [ExampleUserName] FOR LOGIN [ExampleUserName];
ALTER ROLE [db_datawriter] ADD MEMBER [ExampleUserName];
ALTER ROLE [db_datareader] ADD MEMBER [ExampleUserName];
Run Code Online (Sandbox Code Playgroud)

什么是 PostgreSQL 中的等价物?

dez*_*zso 7

PostgreSQL 中没有这样的内置角色。但是,您可以设置一个:

CREATE ROLE db_datawriter;
Run Code Online (Sandbox Code Playgroud)

在此之后,您必须为其分配写权限(通常是INSERTUPDATEDELETE、 可能TRUNCATE)。要了解如何对所有当前和未来的表执行此操作,请阅读我的旧答案

通常,写访问也涉及读,因此添加db_datawriter为成员是有意义的db_datareader(设置类似,但SELECT只有):

GRANT db_datareader TO db_datawriter;
Run Code Online (Sandbox Code Playgroud)

然后,您可以根据需要将这两个授予不同的登录用户(或其他角色):

CREATE USER example_user IN ROLE db_datareader;  
Run Code Online (Sandbox Code Playgroud)

请注意CREATE USER,与CREATE ROLE.