diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2021-03-31 08:01:03 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2021-03-31 08:01:03 +0300 |
commit | d6d3d9ae2ffb1df8eebfe0c922394bbc7b12e4ed (patch) | |
tree | 341f053652cf1e93acf89180a0b072f7d43ef1e1 /tests | |
parent | 96475b78c55141164ecf2719e000d189e4bcbc3d (diff) | |
parent | 99945d77d748470fbb3939be5f7d0e36d24d8097 (diff) | |
download | mariadb-git-d6d3d9ae2ffb1df8eebfe0c922394bbc7b12e4ed.tar.gz |
Merge 10.2 into 10.3
Diffstat (limited to 'tests')
-rwxr-xr-x | tests/grant.pl | 750 |
1 files changed, 0 insertions, 750 deletions
diff --git a/tests/grant.pl b/tests/grant.pl deleted file mode 100755 index b50481a93fc..00000000000 --- a/tests/grant.pl +++ /dev/null @@ -1,750 +0,0 @@ -#!/usr/bin/env perl - -# Copyright (c) 2000, 2005 MySQL AB, 2009 Sun Microsystems, Inc. -# Use is subject to license terms. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; version 2 of the License. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA - -# -# Testing of grants. -# Note that this will delete all table and column grants ! -# - -use DBI; -use Getopt::Long; -use strict; - -use vars qw($dbh $user_dbh $opt_help $opt_Information $opt_force $opt_debug - $opt_verbose $opt_server $opt_root_user $opt_password $opt_user - $opt_database $opt_host $version $user $tables_cols $columns_cols - $tmp_table $opt_silent); - -$version="1.1"; -$opt_help=$opt_Information=$opt_force=$opt_debug=$opt_verbose=$opt_silent=0; -$opt_host="localhost", -$opt_server="mysql"; -$opt_root_user="root"; -$opt_password=""; -$opt_user="grant_user"; -$opt_database="grant_test"; - -GetOptions("Information","help","server=s","root-user=s","password=s","user","database=s","force","host=s","debug","verbose","silent") || usage(); -usage() if ($opt_help || $opt_Information); - -$user="$opt_user\@$opt_host"; - -if (!$opt_force) -{ - print_info() -} - -$|=1; - -$tables_cols="Host, Db, User, Table_name, Grantor, Table_priv, Column_priv"; -$columns_cols="Host, Db, User, Table_name, Column_name, Column_priv"; -$tmp_table="/tmp/mysql-grant.test"; # Can't use $$ as we are logging result -unlink($tmp_table); - -# -# clear grant tables -# - -$dbh = DBI->connect("DBI:mysql:mysql:$opt_host", - $opt_root_user,$opt_password, - { PrintError => 0}) || die "Can't connect to mysql server with user '$opt_root_user': $DBI::errstr\n"; - -safe_query("delete from user where user='$opt_user' or user='${opt_user}2'"); -safe_query("delete from db where user='$opt_user'"); -safe_query("delete from tables_priv"); -safe_query("delete from columns_priv"); -safe_query("lock tables mysql.user write"); # Test lock tables -safe_query("flush privileges"); -safe_query("unlock tables"); # should already be unlocked -safe_query("drop database $opt_database",3); # Don't print possible error -safe_query("create database $opt_database"); - -# check that the user can't login yet - -user_connect(1); -#goto test; - -# -# Enable column grant code -# -safe_query("grant select(user) on mysql.user to $user"); -safe_query("revoke select(user) on mysql.user from $user"); - -# -# Test grants on user level -# - -safe_query("grant select on *.* to $user"); -safe_query("set password FOR ${opt_user}2\@$opt_host = password('test')",1); -safe_query("set password FOR $opt_user\@$opt_host=password('test')"); -user_connect(1); -safe_query("set password FOR $opt_user\@$opt_host=''"); -user_connect(0); -user_query("select * from mysql.user where user = '$opt_user'"); -user_query("select * from mysql.db where user = '$opt_user'"); -safe_query("grant select on *.* to $user,$user"); -safe_query("show grants for $user"); -user_connect(0); - -# The following should fail -user_query("insert into mysql.user (host,user) values ('error','$opt_user')",1); -user_query("update mysql.user set host='error' WHERE user='$opt_user'",1); -user_query("create table $opt_database.test (a int,b int)",1); -user_query("grant select on *.* to ${opt_user}2\@$opt_host",1); -safe_query("revoke select on $opt_database.test from $opt_user\@opt_host",1); -safe_query("revoke select on $opt_database.* from $opt_user\@opt_host",1); -safe_query("revoke select on *.* from $opt_user",1); -safe_query("grant select on $opt_database.not_exists to $opt_user",1); -safe_query("grant FILE on $opt_database.test to $opt_user",1); -safe_query("grant select on *.* to wrong___________user_name",1); -safe_query("grant select on $opt_database.* to wrong___________user_name",1); -user_connect(0); -user_query("grant select on $opt_database.test to $opt_user with grant option",1); -safe_query("set password FOR ''\@''=''",1); -user_query("set password FOR root\@$opt_host = password('test')",1); - -# Change privileges for user -safe_query("revoke select on *.* from $user"); -safe_query("grant create,update on *.* to $user"); -user_connect(0); -safe_query("flush privileges"); -user_query("create table $opt_database.test (a int,b int)"); -user_query("update $opt_database.test set b=b+1 where a > 0",1); -safe_query("show grants for $user"); -safe_query("revoke update on *.* from $user"); -user_connect(0); -safe_query("grant select(c) on $opt_database.test to $user",1); -safe_query("revoke select(c) on $opt_database.test from $user",1); -safe_query("grant select on $opt_database.test to wrong___________user_name",1); -user_query("INSERT INTO $opt_database.test values (2,0)",1); - -safe_query("grant ALL PRIVILEGES on *.* to $user"); -safe_query("REVOKE INSERT on *.* from $user"); -user_connect(0); -user_query("INSERT INTO $opt_database.test values (1,0)",1); -safe_query("grant INSERT on *.* to $user"); -user_connect(0); -user_query("INSERT INTO $opt_database.test values (2,0)"); -user_query("select count(*) from $opt_database.test"); -safe_query("revoke SELECT on *.* from $user"); -user_connect(0); -user_query("select count(*) from $opt_database.test",1); -user_query("INSERT INTO $opt_database.test values (3,0)"); -safe_query("grant SELECT on *.* to $user"); -user_connect(0); -user_query("select count(*) from $opt_database.test"); -safe_query("revoke ALL PRIVILEGES on *.* from $user"); -user_connect(1); -safe_query("delete from user where user='$opt_user'"); -safe_query("flush privileges"); -if (0) # Only if no anonymous user on localhost. -{ - safe_query("grant select on *.* to $opt_user"); - user_connect(0); - safe_query("revoke select on *.* from $opt_user"); - user_connect(1); -} -safe_query("delete from user where user='$opt_user'"); -safe_query("flush privileges"); - -# -# Test grants on database level -# -safe_query("grant select on $opt_database.* to $user"); -safe_query("select * from mysql.user where user = '$opt_user'"); -safe_query("select * from mysql.db where user = '$opt_user'"); -user_connect(0); -user_query("select count(*) from $opt_database.test"); -# The following should fail -user_query("select * from mysql.user where user = '$opt_user'",1); -user_query("insert into $opt_database.test values (4,0)",1); -user_query("update $opt_database.test set a=1",1); -user_query("delete from $opt_database.test",1); -user_query("create table $opt_database.test2 (a int)",1); -user_query("ALTER TABLE $opt_database.test add c int",1); -user_query("CREATE INDEX dummy ON $opt_database.test (a)",1); -user_query("drop table $opt_database.test",1); -user_query("grant ALL PRIVILEGES on $opt_database.* to ${opt_user}2\@$opt_host",1); - -# Change privileges for user -safe_query("grant ALL PRIVILEGES on $opt_database.* to $user WITH GRANT OPTION"); -user_connect(0); -user_query("insert into $opt_database.test values (5,0)"); -safe_query("REVOKE ALL PRIVILEGES on * from $user",1); -safe_query("REVOKE ALL PRIVILEGES on *.* from $user"); -safe_query("REVOKE ALL PRIVILEGES on $opt_database.* from $user"); -safe_query("REVOKE ALL PRIVILEGES on $opt_database.* from $user"); -user_connect(0); -user_query("insert into $opt_database.test values (6,0)",1); -safe_query("REVOKE GRANT OPTION on $opt_database.* from $user"); -user_connect(1); -safe_query("grant ALL PRIVILEGES on $opt_database.* to $user"); - -user_connect(0); -user_query("select * from mysql.user where user = '$opt_user'",1); -user_query("insert into $opt_database.test values (7,0)"); -user_query("update $opt_database.test set a=3 where a=2"); -user_query("delete from $opt_database.test where a=3"); -user_query("create table $opt_database.test2 (a int not null)"); -user_query("alter table $opt_database.test2 add b int"); -user_query("create index dummy on $opt_database.test2 (a)"); -user_query("update test,test2 SET test.a=test2.a where test.a=test2.a"); -user_query("drop table $opt_database.test2"); -user_query("show tables from grant_test"); -# These should fail -user_query("insert into mysql.user (host,user) values ('error','$opt_user',0)",1); - -# Revoke database privileges -safe_query("revoke ALL PRIVILEGES on $opt_database.* from $user"); -safe_query("select * from mysql.user where user = '$opt_user'"); -safe_query("select * from mysql.db where user = '$opt_user'"); - -# Test multi-updates -safe_query("grant CREATE,UPDATE,DROP on $opt_database.* to $user"); -user_connect(0); -user_query("create table $opt_database.test2 (a int not null)"); -user_query("update test,test2 SET test.a=1 where 1",1); -user_query("update test,test2 SET test.a=test2.a where 1",1); -safe_query("grant SELECT on $opt_database.* to $user"); -user_connect(0); -user_query("update test,test2 SET test.a=test2.a where test2.a=test.a"); -user_query("drop table $opt_database.test2"); - -# Revoke database privileges -safe_query("revoke ALL PRIVILEGES on $opt_database.* from $user"); -user_connect(1); - -# -# Test of grants on table level -# - -safe_query("grant create on $opt_database.test2 to $user"); -user_connect(0); -user_query("create table $opt_database.test2 (a int not null)"); -user_query("show tables"); # Should only show test, not test2 -user_query("show columns from test",1); -user_query("show keys from test",1); -user_query("show columns from test2"); -user_query("show keys from test2"); -user_query("select * from test",1); -safe_query("grant insert on $opt_database.test to $user"); -user_query("show tables"); -user_query("insert into $opt_database.test values (8,0)"); -user_query("update $opt_database.test set b=1",1); -safe_query("grant update on $opt_database.test to $user"); -user_query("update $opt_database.test set b=2"); - -user_query("update $opt_database.test,test2 SET test.b=3",1); -safe_query("grant select on $opt_database.test2 to $user"); -user_query("update $opt_database.test,test2 SET test.b=3"); -safe_query("revoke select on $opt_database.test2 from $user"); - -user_query("delete from $opt_database.test",1); -safe_query("grant delete on $opt_database.test to $user"); -user_query("delete from $opt_database.test where a=1",1); -user_query("update $opt_database.test set b=3 where b=1",1); -user_query("update $opt_database.test set b=b+1",1); -user_query("update $opt_database.test,test2 SET test.a=test2.a",1); - -# -# Test global SELECT privilege combined with table level privileges -# - -safe_query("grant SELECT on *.* to $user"); -user_connect(0); -user_query("update $opt_database.test set b=b+1"); -user_query("update $opt_database.test set b=b+1 where a > 0"); -user_query("update $opt_database.test,test2 SET test.a=test2.a"); -user_query("update $opt_database.test,test2 SET test2.a=test.a",1); -safe_query("revoke SELECT on *.* from $user"); -safe_query("grant SELECT on $opt_database.* to $user"); -user_connect(0); -user_query("update $opt_database.test set b=b+1"); -user_query("update $opt_database.test set b=b+1 where a > 0"); -safe_query("grant UPDATE on *.* to $user"); -user_connect(0); -user_query("update $opt_database.test set b=b+1"); -user_query("update $opt_database.test set b=b+1 where a > 0"); -safe_query("revoke UPDATE on *.* from $user"); -safe_query("revoke SELECT on $opt_database.* from $user"); -user_connect(0); -user_query("update $opt_database.test set b=b+1 where a > 0",1); -user_query("update $opt_database.test set b=b+1",1); - -# Add one privilege at a time until the user has all privileges -user_query("select * from test",1); -safe_query("grant select on $opt_database.test to $user"); -user_query("delete from $opt_database.test where a=1"); -user_query("update $opt_database.test set b=2 where b=1"); -user_query("update $opt_database.test set b=b+1"); -user_query("select count(*) from test"); -user_query("update test,test2 SET test.b=4",1); -user_query("update test,test2 SET test2.a=test.a",1); -user_query("update test,test2 SET test.a=test2.a",1); - -user_query("create table $opt_database.test3 (a int)",1); -user_query("alter table $opt_database.test2 add c int",1); -safe_query("grant alter on $opt_database.test2 to $user"); -user_query("alter table $opt_database.test2 add c int"); -user_query("create index dummy ON $opt_database.test (a)",1); -safe_query("grant index on $opt_database.test2 to $user"); -user_query("create index dummy ON $opt_database.test2 (a)"); -user_query("insert into test2 SELECT a,a from test",1); -safe_query("grant insert on test2 to $user",1); # No table: mysql.test2 -safe_query("grant insert(a) on $opt_database.test2 to $user"); -user_query("insert into test2 SELECT a,a from test",1); -safe_query("grant insert(c) on $opt_database.test2 to $user"); -user_query("insert into test2 SELECT a,a from test"); -user_query("select count(*) from test2,test",1); -user_query("select count(*) from test,test2",1); -user_query("replace into test2 SELECT a from test",1); -safe_query("grant update on $opt_database.test2 to $user"); -user_query("update test,test2 SET test2.a=test.a"); -user_query("update test,test2 SET test.b=test2.a where 0",1); -user_query("update test,test2 SET test.a=2 where test2.a>100",1); -user_query("update test,test2 SET test.a=test2.a",1); -user_query("replace into test2 SELECT a,a from test",1); -safe_query("grant DELETE on $opt_database.test2 to $user"); -user_query("replace into test2 SELECT a,a from test"); -user_query("insert into test (a) SELECT a from test2",1); -safe_query("grant SELECT on $opt_database.test2 to $user"); -user_query("update test,test2 SET test.b=test2.a where 0"); -user_query("update test,test2 SET test.a=test2.a where test2.a>100"); - -safe_query("revoke UPDATE on $opt_database.test2 from $user"); -safe_query("grant UPDATE (c) on $opt_database.test2 to $user"); -user_query("update test,test2 SET test.b=test2.a where 0"); -user_query("update test,test2 SET test.a=test2.a where test2.a>100"); -user_query("update test,test2 SET test2.a=test2.a where test2.a>100",1); -user_query("update test,test2 SET test2.c=test2.a where test2.a>100"); - -safe_query("revoke SELECT,UPDATE on $opt_database.test2 from $user"); -safe_query("grant UPDATE on $opt_database.test2 to $user"); - -user_query("drop table $opt_database.test2",1); -user_query("grant select on $opt_database.test2 to $user with grant option",1); -safe_query("grant drop on $opt_database.test2 to $user with grant option"); -user_query("grant drop on $opt_database.test2 to $user with grant option"); -user_query("grant select on $opt_database.test2 to $user with grant option",1); - -# check rename privileges -user_query("rename table $opt_database.test2 to $opt_database.test3",1); -safe_query("grant CREATE,DROP on $opt_database.test3 to $user"); -user_query("rename table $opt_database.test2 to $opt_database.test3",1); -user_query("create table $opt_database.test3 (a int)"); -safe_query("grant INSERT on $opt_database.test3 to $user"); -user_query("drop table $opt_database.test3"); -user_query("rename table $opt_database.test2 to $opt_database.test3"); -user_query("rename table $opt_database.test3 to $opt_database.test2",1); -safe_query("grant ALTER on $opt_database.test3 to $user"); -user_query("rename table $opt_database.test3 to $opt_database.test2"); -safe_query("revoke DROP on $opt_database.test2 from $user"); -user_query("rename table $opt_database.test2 to $opt_database.test3"); -user_query("drop table if exists $opt_database.test2,$opt_database.test3",1); -safe_query("drop table if exists $opt_database.test2,$opt_database.test3"); - -# Check that the user doesn't have some user privileges -user_query("create database $opt_database",1); -user_query("drop database $opt_database",1); -user_query("flush tables",1); -safe_query("flush privileges"); - -safe_query("select $tables_cols from mysql.tables_priv"); -safe_query("revoke ALL PRIVILEGES on $opt_database.test from $user"); -safe_query("revoke ALL PRIVILEGES on $opt_database.test2 from $user"); -safe_query("revoke ALL PRIVILEGES on $opt_database.test3 from $user"); -safe_query("revoke GRANT OPTION on $opt_database.test2 from $user"); -safe_query("select $tables_cols from mysql.tables_priv"); -user_query("select count(a) from test",1); - -# -# Test some grants on column level -# - -safe_query("grant create,update on $opt_database.test2 to $user"); -user_query("create table $opt_database.test2 (a int not null)"); -user_query("delete from $opt_database.test where a=2",1); -user_query("delete from $opt_database.test where A=2",1); -user_query("update test set b=5 where b>0",1); -user_query("update test,test2 SET test.b=5 where b>0",1); - -safe_query("grant update(b),delete on $opt_database.test to $user"); -safe_query("revoke update(a) on $opt_database.test from $user",1); -user_query("delete from $opt_database.test where a=2",1); -user_query("update test set b=5 where b>0",1); -safe_query("grant select(a),select(b) on $opt_database.test to $user"); -user_query("delete from $opt_database.test where a=2"); -user_query("delete from $opt_database.test where A=2"); -user_query("update test set b=5 where b>0"); -user_query("update test set a=11 where b>5",1); -user_query("update test,test2 SET test.b=5 where b>0",1); -user_query("update test,test2 SET test.a=11 where b>0",1); -user_query("update test,test2 SET test.b=test2.a where b>0",1); -user_query("update test,test2 SET test.b=11 where test2.a>0",1); -user_query("select a,A from test"); - -safe_query("select $tables_cols from mysql.tables_priv"); -safe_query("revoke ALL PRIVILEGES on $opt_database.test from $user"); -safe_query("select $tables_cols from mysql.tables_priv"); -safe_query("revoke GRANT OPTION on $opt_database.test from $user",1); -safe_query("drop table $opt_database.test2"); -safe_query("revoke create,update on $opt_database.test2 from $user"); - -# -# Test grants on database level -# - -safe_query("grant select(a) on $opt_database.test to $user"); -user_query("show full columns from test"); -safe_query("grant insert (b), update (b) on $opt_database.test to $user"); - -user_query("select count(a) from test"); -user_query("select count(skr.a) from test as skr"); -user_query("select count(a) from test where a > 5"); -user_query("insert into test (b) values (5)"); -user_query("insert into test (b) values (a)"); -user_query("update test set b=3 where a > 0"); - -user_query("select * from test",1); -user_query("select b from test",1); -user_query("select a from test where b > 0",1); -user_query("insert into test (a) values (10)",1); -user_query("insert into test (b) values (b)",1); -user_query("insert into test (a,b) values (1,5)",1); -user_query("insert into test (b) values (1),(b)",1); -user_query("update test set b=3 where b > 0",1); - -safe_query("select $tables_cols from mysql.tables_priv"); -safe_query("select $columns_cols from mysql.columns_priv"); -safe_query("revoke select(a), update (b) on $opt_database.test from $user"); -safe_query("select $tables_cols from mysql.tables_priv"); -safe_query("select $columns_cols from mysql.columns_priv"); - -user_query("select count(a) from test",1); -user_query("update test set b=4",1); - -safe_query("grant select(a,b), update (a,b) on $opt_database.test to $user"); -user_query("select count(a),count(b) from test where a+b > 0"); -user_query("insert into test (b) values (9)"); -user_query("update test set b=6 where b > 0"); - -safe_query("flush privileges"); # Test restoring privileges from disk -safe_query("select $tables_cols from mysql.tables_priv"); -safe_query("select $columns_cols from mysql.columns_priv"); - -# Try mixing of table and database privileges - -user_query("insert into test (a,b) values (12,12)",1); -safe_query("grant insert on $opt_database.* to $user"); -user_connect(0); -user_query("insert into test (a,b) values (13,13)"); - -# This grants and revokes SELECT on different levels. -safe_query("revoke select(b) on $opt_database.test from $user"); -user_query("select count(a) from test where a+b > 0",1); -user_query("update test set b=5 where a=2"); -safe_query("grant select on $opt_database.test to $user"); -user_connect(0); -user_query("select count(a) from test where a+b > 0"); -safe_query("revoke select(b) on $opt_database.test from $user"); -user_query("select count(a) from test where a+b > 0"); -safe_query("revoke select on $opt_database.test from $user"); -user_connect(0); -user_query("select count(a) from test where a+b > 0",1); -safe_query("grant select(a) on $opt_database.test to $user"); -user_query("select count(a) from test where a+b > 0",1); -safe_query("grant select on *.* to $user"); -user_connect(0); -user_query("select count(a) from test where a+b > 0"); -safe_query("revoke select on *.* from $user"); -safe_query("grant select(b) on $opt_database.test to $user"); -user_connect(0); -user_query("select count(a) from test where a+b > 0"); - - -safe_query("select * from mysql.db where user = '$opt_user'"); -safe_query("select $tables_cols from mysql.tables_priv where user = '$opt_user'"); -safe_query("select $columns_cols from mysql.columns_priv where user = '$opt_user'"); - -safe_query("revoke ALL PRIVILEGES on $opt_database.test from $user"); -user_query("select count(a) from test",1); -user_query("select * from mysql.user order by hostname",1); -safe_query("select * from mysql.db where user = '$opt_user'"); -safe_query("select $tables_cols from mysql.tables_priv where user = '$opt_user'"); -safe_query("select $columns_cols from mysql.columns_priv where user = '$opt_user'"); - -# -# Clear up privileges to make future tests easier - -safe_query("delete from user where user='$opt_user'"); -safe_query("delete from db where user='$opt_user'"); -safe_query("flush privileges"); -safe_query("show grants for $user",1); - -# -# Test IDENTIFIED BY -# - -safe_query("grant ALL PRIVILEGES on $opt_database.test to $user identified by 'dummy', ${opt_user}\@127.0.0.1 identified by 'dummy2'"); -user_connect(0,"dummy"); -safe_query("grant SELECT on $opt_database.* to $user identified by ''"); -user_connect(0); -safe_query("revoke ALL PRIVILEGES on $opt_database.test from $user identified by '', ${opt_user}\@127.0.0.1 identified by 'dummy2'"); -safe_query("revoke ALL PRIVILEGES on $opt_database.* from $user identified by ''"); - -safe_query("show grants for $user"); - -# -# Test bug reported in SELECT INTO OUTFILE -# - -safe_query("create table $opt_database.test3 (a int, b int)"); -safe_query("grant SELECT on $opt_database.test3 to $user"); -safe_query("grant FILE on *.* to $user"); -safe_query("insert into $opt_database.test3 values (1,1)"); -user_connect(0); -user_query("select * into outfile '$tmp_table' from $opt_database.test3"); -safe_query("revoke SELECT on $opt_database.test3 from $user"); -safe_query("grant SELECT(a) on $opt_database.test3 to $user"); -user_query("select a from $opt_database.test3"); -user_query("select * from $opt_database.test3",1); -user_query("select a,b from $opt_database.test3",1); -user_query("select b from $opt_database.test3",1); - -safe_query("revoke SELECT(a) on $opt_database.test3 from $user"); -safe_query("revoke FILE on *.* from $user"); -safe_query("drop table $opt_database.test3"); - -# -# Test privileges needed for LOCK TABLES -# - -safe_query("create table $opt_database.test3 (a int)"); -user_connect(1); -safe_query("grant INSERT on $opt_database.test3 to $user"); -user_connect(0); -user_query("select * into outfile '$tmp_table' from $opt_database.test3",1); -safe_query("grant SELECT on $opt_database.test3 to $user"); -user_connect(0); -user_query("LOCK TABLES $opt_database.test3 READ",1); -safe_query("grant LOCK TABLES on *.* to $user"); -safe_query("show grants for $user"); -safe_query("select * from mysql.user where user='$opt_user'"); -user_connect(0); -user_query("LOCK TABLES $opt_database.test3 READ"); -user_query("UNLOCK TABLES"); -safe_query("revoke SELECT,INSERT,UPDATE,DELETE on $opt_database.test3 from $user"); -user_connect(0); -safe_query("revoke LOCK TABLES on *.* from $user"); -user_connect(1); -safe_query("drop table $opt_database.test3"); - -# -# test new privileges in 4.0.2 -# - -safe_query("show grants for $user"); -safe_query("grant all on *.* to $user WITH MAX_QUERIES_PER_HOUR 1 MAX_UPDATES_PER_HOUR 2 MAX_CONNECTIONS_PER_HOUR 3"); -safe_query("show grants for $user"); -safe_query("revoke LOCK TABLES on *.* from $user"); -safe_query("flush privileges"); -safe_query("show grants for $user"); -safe_query("revoke ALL PRIVILEGES on *.* from $user"); -safe_query("show grants for $user"); - -# -# Clean up things -# - -unlink($tmp_table); -safe_query("drop database $opt_database"); -safe_query("delete from user where user='$opt_user'"); -safe_query("delete from db where user='$opt_user'"); -safe_query("delete from tables_priv"); -safe_query("delete from columns_priv"); -safe_query("flush privileges"); - -print "end of test\n"; -exit 0; - -sub usage -{ - print <<EOF; -$0 Ver $version - -This program tests that the GRANT commands works by creating a temporary -database ($opt_database) and user ($opt_user). - -Options: - ---database (Default $opt_database) - In which database the test tables are created. - ---force - Don''t ask any question before starting this test. - ---host='host name' (Default $opt_host) - Host name where the database server is located. - ---Information ---help - Print this help - ---password - Password for root-user. - ---server='server name' (Default $opt_server) - Run the test on the given SQL server. - ---user (Default $opt_user) - A non-existing user on which we will test the GRANT commands. - ---verbose - Write all queries when we are execute them. - ---root-user='user name' (Default $opt_root_user) - User with privileges to modify the 'mysql' database. -EOF - exit(0); -} - - -sub print_info -{ - my $tmp; - print <<EOF; -This test will clear your table and column grant table and recreate the -$opt_database database ! -All privileges for $user will be destroyed ! - -Don\'t run this test if you have done any GRANT commands that you want to keep! -EOF - for (;;) - { - print "Start test (yes/no) ? "; - $tmp=<STDIN>; chomp($tmp); $tmp=lc($tmp); - last if ($tmp =~ /^yes$/i); - exit 1 if ($tmp =~ /^n/i); - print "\n"; - } -} - - -sub user_connect -{ - my ($ignore_error,$password)=@_; - $password="" if (!defined($password)); - - print "Connecting $opt_user\n" if ($opt_verbose); - $user_dbh->disconnect if (defined($user_dbh)); - - $user_dbh=DBI->connect("DBI:mysql:$opt_database:$opt_host",$opt_user, - $password, { PrintError => 0}); - if (!$user_dbh) - { - if ($opt_verbose || !$ignore_error) - { - print "Error on connect: $DBI::errstr\n"; - } - if (!$ignore_error) - { - die "The above should not have failed!"; - } - } - elsif ($ignore_error) - { - die "Connect succeeded when it shouldn't have !\n"; - } -} - -sub safe_query -{ - my ($query,$ignore_error)=@_; - if (do_query($dbh,$query, $ignore_error)) - { - if (!defined($ignore_error)) - { - die "The above should not have failed!"; - } - } - elsif (defined($ignore_error) && $ignore_error == 1) - { - die "Query '$query' succeeded when it shouldn't have !\n"; - } -} - - -sub user_query -{ - my ($query,$ignore_error)=@_; - if (do_query($user_dbh,$query, $ignore_error)) - { - if (!defined($ignore_error)) - { - die "Query '$query' should not have failed!"; - } - } - elsif (defined($ignore_error) && $ignore_error == 1) - { - die "Query '$query' succeeded when it shouldn't have !\n"; - } -} - - -sub do_query -{ - my ($my_dbh, $query, $ignore_error)=@_; - my ($sth, $row, $tab, $col, $found, $fatal_error); - - print "$query\n" if ($opt_debug || $opt_verbose); - if (!($sth= $my_dbh->prepare($query))) - { - print "Error in prepare: $DBI::errstr\n"; - return 1; - } - if (!$sth->execute) - { - $fatal_error= ($DBI::errstr =~ /parse error/); - if (!$ignore_error || ($opt_verbose && $ignore_error != 3) || $fatal_error) - { - print "Error in execute: $DBI::errstr\n"; - } - die if ($fatal_error); - $sth->finish; - return 1; - } - $found=0; - if (!$opt_silent) - { - while (($row=$sth->fetchrow_arrayref)) - { - $found=1; - $tab=""; - foreach $col (@$row) - { - print $tab; - print defined($col) ? $col : "NULL"; - $tab="\t"; - } - print "\n"; - } - print "\n" if ($found); - } - $sth->finish; - return 0; -} |