Disabling "SHOW TABLES;" on mysql
As far as I know you cannot disable SHOW TABLES, but if you have only assigned permissions to tables that the user should be able to access, I don't see how there is a security issue.  A user cannot list tables to which he has no permissions.

root@beren [~]# mysql -u root -p
Enter password:

&lt;-- SNIP --&gt;

mysql&gt; use foo;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql&gt; show tables;
+---------------+
| Tables_in_foo |
+---------------+
| bar           |
| baz           |
+---------------+
2 rows in set (0.00 sec)

mysql&gt; create user 'quux'@'localhost' identified by '*******';
Query OK, 0 rows affected (0.00 sec)

mysql&gt; grant select on table foo.bar to 'quux'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql&gt; flush privileges;
Query OK, 0 rows affected (0.02 sec)

mysql&gt; exit
Bye
root@beren [~]# mysql -u quux -p foo
Enter password:

&lt;-- SNIP --&gt;

mysql&gt; show tables;
+---------------+
| Tables_in_foo |
+---------------+
| bar           |
+---------------+
1 row in set (0.00 sec)

mysql&gt;