4

我的机器上有一个只应该运行 mysql 的用户。有什么方法可以将该用户的外壳设置为 mysql 并使用密码和用户名登录?

我知道如何将 shell 更改为 mysql 二进制文件

usermod -s /usr/bin/mysql

这确实有效,只是我无法在程序中提供用户名/密码。通常用户/密码被给出为

mysql -u $USER -p

我无法为 shell 提供参数,如

usermod -s "/usr/bin/mysql -u $USER -p" # Does not work!

同样使用简单的 shell 脚本作为 shell 也不起作用:

#!/bin/sh # mysqlShell
/usr/bin/mysql -u $USER -p
----
usermod -s mysqlShell # does not work

那么如何为我用作用户 shell 的程序提供参数呢?


感谢姆雷格纳,我可以找到一个使用 .my.cnf 的解决方案,其中包含

[client]
host=localhost
user=$user
password=$pass
disable-auto-rehash

其中mysql设置为shell。我仍然想手动输入密码,但这是我找到的最好的。

4

3 回答 3

2

为用户设置$HOME/.my.cnf文件

[client]
host=localhost
user=mysqluser
password=mysqlpass

然后将bash设置为登录shell并将以下内容放入$HOME/.bashrc

exec mysql --host=localhost dbname

那应该做你想做的事,而有问题的用户只需要提供一个密码(登录时的系统帐户密码)。

exec用 mysql 进程替换 shell 进程。

如果这不能按预期工作,您可能需要调整$HOME/.bash_profilesource .bashrc

[[ -f ~/.bashrc ]] && . ~/.bashrc

提供适当的 shell.my.cnf设置可能就足够了/usr/bin/mysql,但这样您就可以将任意命令行选项/标志传递给 mysql 客户端。

于 2013-05-24T09:49:57.933 回答
1

您可以通过在 /etc/passwd 中编辑用户的帐户详细信息并更改默认 shell 来做到这一点。

于 2013-05-24T08:54:51.980 回答
1

您需要一个登录密码(除非您设置ssh得当)。使用以下命令:sudo passwd username 更改该登录密码。

您还需要一个 mysql 密码。使用SET PASSWORD Mysql请求。

如果您希望用户使用某些固定密码连接到某个固定数据库,请编写一个小型 C 包装器(然后,使可执行文件只能由您的 Unix 用户执行)执行mysql_real_connect ,或者为用户名密码databasename调用某些exec函数, 但我没有t 建议稍后再做(因为会显示密码,这是一个安全风险)。mysql --user= --password= ps aux

也许,由于 MySQL 是免费软件,您可以根据mysql您的特定需求自定义源代码。

也许使用受限外壳仔细配置它会更好。

于 2013-05-24T09:31:58.073 回答