lo_import 的权限被拒绝

时间:2021-06-20 18:49:34

标签: postgresql permissions psql

我运行以下代码来设置我的数据库,但在运行第三个命令 psql:db/seed_data.sql:3: ERROR: permission denied for function lo_import

时出现错误

setup.sh

psql -h localhost -p 5432 \
  --dbname=postgres \
  --file=db/db_setup.sql 

psql -h localhost -p 5432 \
  --username=admin \
  --dbname=mydb \
      --file=db/schema.sql

psql -h localhost -p 5432 \
  --username=admin \
  --dbname=mydb \
  --file=db/seed_data.sql

db_setup.sql 将所有权限授予我的管理员用户

CREATE DATABASE mydb;

CREATE ROLE admin WITH LOGIN;

GRANT ALL PRIVILEGES ON DATABASE mydb to admin;

seed_data.sql 包含以下命令

INSERT INTO mydb(name, raster) VALUES('Herald', lo_import('/Users/myname/this-folder/some-image-name.png'));

当我从 PQSL 命令行手动运行 INSERT INTO 命令时,它成功了,但是当我尝试在 setup.sh 脚本的上下文中运行它时,它失败了。

我很困惑,因为用户应该拥有插入数据库的所有权限。

some-image-name.png 的文件权限为 -rwxr-xr-x

1 个答案:

答案 0 :(得分:0)

根据文档 lo functions。特别是; “服务器端 lo_import 和 lo_export 函数的行为与其客户端类似物有很大不同。这两个函数使用数据库拥有用户的权限在服务器的文件系统中读取和写入文件。因此,默认情况下,它们的使用仅限于超级用户。”