Nuno Pereira wrote:

Michael Stassen wrote:

Ehrwin Mina wrote:

Jeff,

You can make a shell script or a php script or a perl script by that way you can hide the commands you need to execute.

eg.

Make a shell script (myshell.sh)

#!/bin/sh

myuser=dbuser
mypasswd=dbpassword
mydb=dbname
myhost=localhost
myport=3306

db1=mysql -u$myuser -pmypasswd -Dmydb -h$myhost -P$myport

echo "repair table employee" | $db1
echo "unlock table " | $db1

exit

This is no more secure, as it still puts the password on the command line. Your script amounts to

echo "repair table employee" | mysql -udbuser -pdbpassword -Ddbname -hlocalhost -P3306

echo "unlock table " | mysql -udbuser -pdbpassword -Ddbname -hlocalhost -P3306

The password is on the command line of the commands issued by the script, so it can be seen with ps.

That isn't true. If you make a ps, you will see something like "mysql -p x xxxxxxxx ................".

From the manual <http://dev.mysql.com/doc/mysql/en/password-security.html>:

  shell> mysql -u francis -pfrank db_name

  This is convenient but insecure, because your password becomes visible to
  system status programs such as ps that may be invoked by other users to
  display command lines. MySQL clients typically overwrite the command-line
  password argument with zeros during their initialization sequence, but
  there is still a brief interval during which the value is visible.

You see? The client overwrites the password (producing the "x xxxxxxxx"), but it is visible via ps until then. That makes you vulnerable to ps sniffing. The recommended two methods for secure entering of passwords:

* Use -p without the password for interactive clients (you get prompted for the password).

* Use an option file to store the password. This works for both interactive and non-interactive jobs.

See the manual page referenced above for the details.

As I said before, you can use something like:
"mysql -uUser --password=`cat password_file` db"

See http://lists.mysql.com/mysql/186720.

You can, but why are you reinventing the wheel? Option files have already been provided for this purpose. In what way is storing the batch user password in 'password_file' better than than storing it in an option file?

In fact, it is worse. Your shell executes `cat password_file` to get "password", then executes `mysql -uUser --password="password" db`. Again, the password is briefly visible to ps, until the client overwrites it.

Michael

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to