Postgresql有权提交文件,但表示没有

时间:2015-07-25 14:39:14

标签: postgresql permissions file-permissions fedora

我在Fedora 22上从PostgreSQL 9.4.4获得了非常奇怪的行为:

我试图从psql运行此查询:

su - postgres
psql dbName
COPY sometable FROM '/the/file/location.csv' WITH DELIMITER AS ',' CSV;

它给了我这个错误:

could not open file "/the/file/location.csv" for reading: Permission denied

但是,如果我这样做:

su - postgres
nano /the/file/location.csv

它按预期打开文件,因为整个路径都具有所有用户的读/执行权限。

有谁知道为什么会这样?

编辑:我现在甚至尝试将文件移至/tmp/file.csv,将文件的所有权更改为postgres并关闭SELinux的。仍然是同样的错误。

编辑2 :我忘了提到这是一个Master-Slave设置,我从Slave服务器SSH连接到Master。否则设置工作正常。

编辑3 :我收回我原先说的话。关闭SELinux解决了这个问题。我现在需要找出一种方法来使用它来正确地解决这个问题。

1 个答案:

答案 0 :(得分:0)

这是一个SELinux问题。该文件需要postgresql_db_t标签。

这可以通过对单个文件运行此命令来完成:

chcon --reference /var/lib/pgsql/data/ /the/file/location.csv

或整个目录的此命令

chcon -R --reference /var/lib/pgsql/data/ /the/directory/

这些命令告诉SELinux将PosgresSQL标签/从PostgreSQL的默认目录复制到PosgreSQL被拒绝访问的文件/目录。

可以使用ls -lZ检查,之后应该看起来像这样:

-rwxrwxrwx. 1 postgres postgres system_u:object_r:postgresql_db_t:s0 0 Jul 26 00:00 fileName.csv