为了更清楚地解释这个问题,让我解释一下我的用例。
我有一个与用户一起运行的 MySQL 数据库(因此是一个应用程序)mysql
,并且该数据库有 2 个root
用户:
- 可以通过 TCP 连接访问,但没有权限
- 一个可从本地套接字访问的,并具有所有权限
为了备份数据,我正在运行一个命令,root
以便它可以使用套接字连接并执行查询,因此创建的数据归我所有,root
因为我需要以用户身份访问(读/写)它,所以我不需要它mysql
。
有没有办法以用户身份执行命令,但强制/更改uid
磁盘上写入的文件的权限?
答案1
另一个解决方案是创建一个由 mysql 拥有的空文件,然后使用“>>”来附加该文件而不是创建它。
我还没有尝试过,但是除了使用 tee,你也可以使用 cat -
$ mysqldump phpmyadmin | sudo -u mysql cat >> mysqldump.sql
或者创建文件或文件夹并设置权限前脚本使用它。
答案2
将输出通过管道传输mysqldump
到目标用户并在目标用户下tee
运行。tee
$ mysqldump phpmyadmin |sudo -u mysql tee mysqldump.sql >/dev/null
$ ls -l *.sql
-rw-r--r-- 1 mysql mysql 19071 Nov 22 09:13 mysqldump.sql
这> /dev/null
会阻止向控制台输出额外的内容。
答案3
您需要chown
备份操作后的文件。
但是,首选方案是创建另一个数据库用户进行备份,并使用普通用户帐户登录该用户。您不应该使用该root
帐户执行任何未明确需要所有权限的操作。