我使用包管理器 apt-get 安装了 postgresql-common 和 postgresql-9.4 。
我将我的数据库系统从OSX更改为Debian 8.1,之后我遇到了Permission denied错误的困难。
用户 postgres 存在(CREATE USER postgres;
),数据库检测器存在CREATE DATABASE detector WITH OWNER=postgres;
)。
我成功运行
masi@pc212:~$ sudo -u postgres psql detector -c "DROP TABLE measurements;"DROP TABLE
masi@pc212:~$ sudo -u postgres psql detector -c "CREATE TABLE measurements ( m_id SERIAL PRIMARY KEY NOT NULL, m_size INTEGER NOT NULL );"
CREATE TABLE
但在Dropbox -directory
中同样失败masi@pc212:~$ cd Dropbox/
masi@pc212:~/Dropbox$ sudo -u postgres psql detector -c "DROP TABLE measurements;"
could not change directory to "/home/masi/Dropbox": Permission denied
DROP TABLE
masi@pc212:~/Dropbox$ sudo -u postgres psql detector -c "CREATE TABLE measurements ( m_id SERIAL PRIMARY KEY NOT NULL, m_size INTEGER NOT NULL );"
could not change directory to "/home/masi/Dropbox": Permission denied
CREATE TABLE
命令psql
位于 / etc / sudoers 中的SECURE_PATH中:
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
命令which psql
提供/usr/bin/psql
。
我保留代码的真实目录是 / home / masi / Dropbox / det / 可能Dropbox安装正在影响的事情:
我可以将Dropbox更改为
但无法增加权限因为我开始获取 ls:无法访问../../Dropbox/:Permission denied 虽然具有完全开放的权限。 这是一种非常奇怪的行为,这里完全打开权限会导致这种行为。
类似错误
为什么Dropbox会给PostgreSQL带来这样的问题?
答案 0 :(得分:1)
Dropbox的内容已加密且必须映射,并非每个用户都可以访问系统上的$ HOME / Dropbox。当您使用unix文件管理器行Nautilus或Nemo时,Dropbox必须安装一个插件,以便他们可以浏览文件,就像它只是一个简单的目录一样。
此目录只能从安装了dropbox的用户读取/写入,并且通常PostgreSQL在其自己的用户下运行。您可以将postgreSQL用户添加到可以访问$ HOME / Dropbox的组(您安装和配置Dropbox的用户)
另外,如果你打算创建一个实时备份,你可以做一个从Dropbox转到普通文件夹的脚本,即使我不鼓励使用同步云服务,原因很多,第一个是http://support.code42.com/CrashPlan/Latest/Backup/Comparing_Cloud_Backup_And_Cloud_Storage 。
修改强> 要添加postgresql以充当您的用户,您可以拥有自己的组或共享组
最简单的方法是ls -la $HOME/Dropbox
查看与./
相关联的用户和群组,然后将此特定群组添加到用户postgres
您可以输入groups postgres
来查看此用户已有访问权限的群组,并在添加群组后进行确认。
my_dropbox_group
)更改执行/读/写该组的权限。然后将您的用户和postgres添加到my_dropbox_group
组,这样您就可以将postgres限制为仅限Dropbox,并且您的用户可以与my_dropbox_group
组拥有相同的访问权限。如果您有多个用户,每个用户都有一个个人Dropbox,您必须创建不同的群组,以便人们无法访问其他保管箱,例如dropbox_mike
和dropbox_paul
是两个不同的保管箱帐户,您可以从该手动管理访问权限
希望我没有把事情与第二部分混为一谈
答案 1 :(得分:0)
Petesh评论中的一些答案,但也需要阅读-flag。 运行
sudo chmod -R go=rx /home/masi/Dropbox
但如果可以,请避免递归。
该命令允许后续的sudo -u postgres
命令。 您通常必须打开对目录和所有父目录的访问权限,以允许命令处理目录中的文件。在所有情况下执行都不够; read -flag也是必需的。