mysql - sudo 用于使用 mysql 连接匿名用户的脚本

标签 mysql bash sudo anonymous-users

我有以下脚本:

[root@localhost:~]# cat /mnt/start_discovery
#!/bin/sh
InterfaceNumber=$((65471 - $1))
mysql --user=' ' --execute="insert into dc.discovery_commands(device, job_ttd) select $InterfaceNumber, DATE_ADD( UTC_TIMESTAMP(), INTERVAL 12 HOUR);"

和 3 个允许执行命令的用户:root、ste 和 www。用户 ste 和 www 使用 sudo 执行命令,没有 sudo root 工作。

[root@localhost:~]# cat /etc/sudoers
root    ALL=(ALL)   ALL
ste     ALL=(ALL)   ALL
www     ALL=/mnt/start_discovery *,\
            sh -xv *

当我从用户 www 运行命令时 - 一切正常:

[www@localhost:~]$ sudo sh -xv /mnt/start_discovery 0
#!/bin/sh
InterfaceNumber=$((65471 - $1))
+ InterfaceNumber=65471
mysql --user=' ' --execute="insert into dc.discovery_commands(device, job_ttd) select $InterfaceNumber, DATE_ADD( UTC_TIMESTAMP(), INTERVAL 12 HOUR);"
+ mysql --user=  --execute=insert into dc.discovery_commands(device, job_ttd) select 65471, DATE_ADD( UTC_TIMESTAMP(), INTERVAL 12 HOUR);

但是对于用户ste:

[ste@localhost:~]$ sudo sh -xv /mnt/start_discovery 0
#!/bin/sh
InterfaceNumber=$((65471 - $1))
+ InterfaceNumber=65471
mysql --user=' ' --execute="insert into dc.discovery_commands(device, job_ttd) select $InterfaceNumber, DATE_ADD( UTC_TIMESTAMP(), INTERVAL 12 HOUR);"
+ERROR 1045 (28000): Access denied for user ' '@'localhost' (using password: YES)

对于用户 root 相同:

[root@localhost:~]# sh -xv /mnt/start_discovery 0
#!/bin/sh
InterfaceNumber=$((65471 - $1))
+ InterfaceNumber=65471
mysql --user=' ' --execute="insert into dc.discovery_commands(device, job_ttd) select $InterfaceNumber, DATE_ADD( UTC_TIMESTAMP(), INTERVAL 12 HOUR);"
+ERROR 1045 (28000): Access denied for user ' '@'localhost' (using password: YES)

对于用户 root 和 ste 我在文件 ~/.my.cnf 中有 mysql 的密码,对于用户 www - 没有任何访问 mysql 的权限。 创建 mysql 的用户:

[root@localhost:~]# mysql -e "select user,host,password from mysql.user;"
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *48A8ACDAF5434778D6B5D0254833B2AEC555514A |
| ste  | localhost | *425AF4AF33C4FB42AC52A0A6630DEE61AB94A67A |
|      | localhost |                                           |
+------+-----------+-------------------------------------------+

知道为什么会这样吗?以及如何更好地让所有用户都可以执行此脚本(脚本具有权限 750 并且需要 sudo)?

最佳答案

尝试 #2 和 #3(以 steroot 运行脚本)出现的错误提到“(使用密码:YES)”,尽管您的脚本中的调用行没有提供密码。

这两个用户必须有一个自定义的个人配置文件 (~/.my.cnf),其中包含一个 password 子句(在这种情况下,默认情况下始终提供此类密码)。

尝试在脚本中添加以下选项:--password=''

关于mysql - sudo 用于使用 mysql 连接匿名用户的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15473161/

相关文章:

linux - X11:以另一个用户身份运行 gnome 应用程序

shell - 如何确定 shell 脚本是否以 root 权限运行?

mysql - SQL 连接 : Select rows with no match in second table

java - Spring MVC Hibernate 使用动态 SQL 表

Bash - 如何获取字符串长度排除转义字符

linux - tar 排除不起作用

linux 将路径附加到 secure_path 以使用 sudo 运行 pyenv

php - 如果数据库连接失败则加载默认图像

mysql - 通过 Laravel 迁移创建/使用存储过程

bash - 递归复制文件夹,排除部分文件夹