I've been attempting to create a mySql database while granting
administration user permissions on just that database to a
particular user. I suppose I'm overlooking something simple, but I
just can't get it after a full day of playing. My root user and its
password work fine, but my other user does not. Note that root uses
a ~root/.my.cnf file to set user and password. It does not matter if
the administrator user uses a .my.cnf file or not (the sample does NOT).
I've created a small script to demonstrate my problem that I've attached
to this E-mail. This script drops the database then recreates it from
scratch along with running some (failing) operations as the
administration user (gilbert. While I know that mySql user names are
not related to UNIX login names... but I am having login gilbert use
m ySql user gilbert).
The key commands are:
grant all privileges on Baseball.* to gilbert identified by "first"
with grant option;
use mysql;
SET PASSWORD FOR gilberet=PASSWORD("first");
flush privileges;
I've also attached the output of the script. Please notice that the
following shows many 'N' permissions:
use msql;
select * from user where User = "gilbert";
quote
su -
mysqlaccess gilbert Baseball; #also shows nothing but NOs
while the following shows the expected 'Y' permissions:
use msql;
select * from id where User = "gilbert";
I am using Red Hat 7.1, (2.4 kernel) and mysql Ver 11.13 Distrib
3.23.36, for redhat-linux-gnu (i386)
Attachments are also available at http://www.exit109.com/~ghealton/
problem.txt
problem.mysql
problem.log
(these are all text files)
----------------------------------------------------------------------
[EMAIL PROTECTED] http://www.exit109.com/~ghealton/
----------------------------------------------------------------------
Computers are like air conditioners:
they don't work well when Windows are left open
#!/bin/bash -x
### demonstrate my problem
#### EXECUTE AS USER ROOT
echo " =================================== $*"
#### configurations users must leave alone unless they are true gurus
user=gilbert; #user name to test, as know to mySql
db=Baseball; #database to use
table=Abbott; #table name to build
password=first; #password to assign gilbert
die ()
{
echo 1>&2 "$id: $*";
exit 1;
}
id=`basename $0`; #our script name
echo "$id: creating mySql tables in $db database"
id $user || die "USER $user IS NOT PRESENT";
### VERIFY THAT THE .my.cnf FILE DOES NOT EXIST
for u in $user; do
eval "cnf=~${u}/\$my_cnf"; #standard configuration file for `mysql`
if [ -f $cnf ]; then
die "$cnf CONFIGURATION FILE EXISTS";
fi
done
echo " ======= create database and set password ======="
echo "update user set Password=PASSWORD('$password') where user='$user';"
/usr/bin/mysql -u root<<EOF; ### --host=$host
drop database if exists $db;
create database if not exists $db;
use $db;
create table if not exists $table
(
position character(20) not null,
player character(20)
);
grant all privileges on $db.* to $user identified by "$password" with grant option;
insert into $table values ( 'First', 'Who' );
insert into $table values ( 'Second', 'What' );
insert into $table values ( 'Third', "I Don't Know" );
insert into $table values ( 'Catcher', 'Today' );
use mysql
update user set Password=PASSWORD("$password") where user="$user";
flush privileges;
# SET PASSWORD FOR $user=PASSWORD("$password");
# flush privileges;
select * from user where User = "$user";
select * from db where User = "$user";
#### show encrypted version of this password
select password("$password");
EOF
status=$?; #save mySql exit status
echo " ====== showing access permissions "
if [ $status -eq 0 ]; then
mysqlaccess "$user" "$db"
status=$?
fi
echo " ======= testing selection under -u $user ======="
### this does not work, but I don't see why. The .html documentation
### seems to claim that is is a bad password (see previous mysqlaccess error),
### but the password sure looks good to me.
/usr/bin/mysql -u $user -p$password $db <<EOF; ### --host=$host
select * from $db;
EOF
if [ $status -eq 0 ]; then
echo "===== showing basic database info ====="
mysqlshow -u$user -p$password $db $table
status=$?
fi
if [ $status -eq 0 ]; then
echo "$id: successful AmpWaveUsers database creation"
else
echo "$id: DID NOT PROPERLY CREATE AmpWave DATABASE"
fi
exit $status;
#end
+ echo ' =================================== '
===================================
+ user=gilbert
+ db=Baseball
+ table=Abbott
+ password=first
++ basename ./problem.mysql
+ id=problem.mysql
+ echo 'problem.mysql: creating mySql tables in Baseball database'
problem.mysql: creating mySql tables in Baseball database
+ id gilbert
uid=1000(gilbert) gid=100(users)
groups=100(users),19(floppy),44(pppusers),27(mysql),1000(adult),1008(windows),1044(public)
+ eval 'cnf=~gilbert/$my_cnf'
++ cnf=/home/gilbert/
+ '[' -f /home/gilbert/ ']'
+ echo ' ======= create database and set password ======='
======= create database and set password =======
+ echo 'update user set Password=PASSWORD('\''first'\'') where user='\''gilbert'\'';'
update user set Password=PASSWORD('first') where user='gilbert';
+ /usr/bin/mysql -u root
Host User Password Select_priv Insert_priv Update_priv
Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv
Process_priv File_priv Grant_priv References_priv Index_priv
Alter_priv
% gilbert 5ba6098671b952ea N N N N N N
N N N N N N N N
Host Db User Select_priv Insert_priv Update_priv Delete_priv
Create_priv Drop_priv Grant_priv References_priv Index_priv
Alter_priv
% Baseball gilbert Y Y Y Y Y Y Y
Y Y Y
password("first")
5ba6098671b952ea
+ status=0
+ echo ' ====== showing access permissions '
====== showing access permissions
+ '[' 0 -eq 0 ']'
+ mysqlaccess gilbert Baseball
Could not open outputfile ~/mysqlaccess.log for debugging-info
mysqlaccess Version 2.06, 20 Dec 2000
By RUG-AIV, by Yves Carlier ([EMAIL PROTECTED])
Changes by Steve Harvey ([EMAIL PROTECTED])
This software comes with ABSOLUTELY NO WARRANTY.
Access-rights
for USER 'gilbert', from HOST 'localhost', to DB 'Baseball'
+-----------------+---+ +-----------------+---+
| Select_priv | N | | Shutdown_priv | N |
| Insert_priv | N | | Process_priv | N |
| Update_priv | N | | File_priv | N |
| Delete_priv | N | | Grant_priv | N |
| Create_priv | N | | References_priv | N |
| Drop_priv | N | | Index_priv | N |
| Reload_priv | N | | Alter_priv | N |
+-----------------+---+ +-----------------+---+
BEWARE: Everybody can access your DB as user `gilbert' from host `localhost'
: WITHOUT supplying a password.
: Be very careful about it!!
BEWARE: Accessing the db as an anonymous user.
: Your username has no relevance
The following rules are used:
db : 'No matching rule'
host : 'Not processed: host-field is not empty in db-table.'
user : 'localhost','','','N','N','N','N','N','N','N','N','N','N','N','N','N','N'
BUGs can be reported by email to [EMAIL PROTECTED]
+ status=0
+ echo ' ======= testing selection under -u gilbert ======='
======= testing selection under -u gilbert =======
+ /usr/bin/mysql -u gilbert -pfirst Baseball
ERROR 1045: Access denied for user: 'gilbert@localhost' (Using password: YES)
+ '[' 0 -eq 0 ']'
+ echo '===== showing basic database info ====='
===== showing basic database info =====
+ mysqlshow -ugilbert -pfirst Baseball Abbott
mysqlshow: Access denied for user: 'gilbert@localhost' (Using password: YES)
+ status=1
+ '[' 1 -eq 0 ']'
+ echo 'problem.mysql: DID NOT PROPERLY CREATE AmpWave DATABASE'
problem.mysql: DID NOT PROPERLY CREATE AmpWave DATABASE
+ exit 1
---------------------------------------------------------------------
Before posting, please check:
http://www.mysql.com/manual.php (the manual)
http://lists.mysql.com/ (the list archive)
To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php