根用户运行命令,但强制该命令以另一个用户身份写入数据

根用户运行命令,但强制该命令以另一个用户身份写入数据

为了更清楚地解释这个问题,让我解释一下我的用例。

我有一个与用户一起运行的 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帐户执行任何未明确需要所有权限的操作。

相关内容