postgresql 拒绝lo_import的权限

gmxoilav  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(151)

我运行以下代码来设置我的数据库,当运行第三个命令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命令行手动运行该命令时,它会成功,但是当我尝试在setup.sh脚本的上下文中运行它时,它会失败。
我很困惑,因为用户应该拥有插入数据库的所有权限。
some-image-name.png的文件权限为-rwxr-xr-x

disho6za

disho6za1#

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

相关问题