Multiple Access to Database - The Answer

Ethan Rosenberg <[email protected]>
Newsgroups gmane.comp.php.database
Message-ID <[email protected]>
Dear List -

I have a database:

mysql> show tables;
+---------------------+
| Tables_in_hospital2 |
+---------------------+
| Intake3             |
| Visit3              |
+---------------------+


mysql> describe Intake3;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| Site   | varchar(6)  | NO   | PRI |         |       |
| MedRec | int(6)      | NO   | PRI | NULL    |       |
| Fname  | varchar(15) | YES  |     | NULL    |       |
| Lname  | varchar(30) | YES  |     | NULL    |       |
| Phone  | varchar(30) | YES  |     | NULL    |       |
| Height | int(4)      | YES  |     | NULL    |       |
| Sex    | char(7)     | YES  |     | NULL    |       |
| Hx     | text        | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+

mysql> describe Visit3;
+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| Indx   | int(4)       | NO   | PRI | NULL    | auto_increment |
| Site   | varchar(6)   | YES  |     | NULL    |                |
| MedRec | int(6)       | YES  |     | NULL    |                |
| Notes  | text         | YES  |     | NULL    |                |
| Weight | int(4)       | YES  |     | NULL    |                |
| BMI    | decimal(3,1) | YES  |     | NULL    |                |
| Date   | date         | YES  |     | NULL    |                |
+--------+--------------+------+-----+---------+----------------+

I want Bob to have access to all tables and fields, with all privileges.
I want John to have read access to  Visit3: fields [Site, MedRec, 
Weight, BMI]

1] How do I do it?
2] In the case that I have two users with write access to a table, how 
do I lock the tables/fields so that the two users can not change the 
same varible at the same time?

Thanks.

Ethan

==============

--> THE ANSWER <---
First - AS ROOT - Create the users and their privileges:

create user 'bob'@'localhost' identified by '1234';
grant all on hospital2.* to 'bob'@'localhost';

create user 'john'@'localhost' identified by '5678';
grant select on hospital2.Visit3 to 'john'@'localhost';
grant select (Site,MedRec,Weight,BMI,Date) on  hospital2.Visit3 to 
'john'@'localhost';


========
logout and login as bob

ethan@rosenberg:~/Desktop$ /usr/bin/mysql -u bob -p
Enter password:
Welcome to the MySQL monitor.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hospital2          |
+--------------------+

use hospital2;

show tables;

+---------------------+
| Tables_in_hospital2 |
+---------------------+
| Intake3             |
| Visit3              |
+---------------------+

mysql> describe Visit3;
+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| Indx   | int(4)       | NO   | PRI | NULL    | auto_increment |
| Site   | varchar(6)   | YES  |     | NULL    |                |
| MedRec | int(6)       | YES  |     | NULL    |                |
| Notes  | text         | YES  |     | NULL    |                |
| Weight | int(4)       | YES  |     | NULL    |                |
| BMI    | decimal(3,1) | YES  |     | NULL    |                |
| Date   | date         | YES  |     | NULL    |                |
+--------+--------------+------+-----+---------+----------------+


logout and login as john

ethan@rosenberg:~/Desktop$ /usr/bin/mysql -u john -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.

use hospital2;

mysql> show tables;
+---------------------+
| Tables_in_hospital2 |
+---------------------+
| Visit3              |
+---------------------+

--> NOTE only access to one table <--

mysql> describe Visit3;
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| Site   | varchar(6)   | YES  |     | NULL    |       |
| MedRec | int(6)       | YES  |     | NULL    |       |
| Weight | int(4)       | YES  |     | NULL    |       |
| BMI    | decimal(3,1) | YES  |     | NULL    |       |
| Date   | date         | YES  |     | NULL    |       |
+--------+--------------+------+-----+---------+-------+

--> Compare this to bob. See above <--

mysql> INSERT INTO Visit3 (Site) VALUES(15);
ERROR 1142 (42000): INSERT command denied to user 'john'@'localhost' for 
table 'Visit3'

--> NOTE: Readonly privileges <--

The explanation of Lock Tables is long and complicated.  It can be found 
here:

http://dev.mysql.com/doc/refman/5.1/en/lock-tables.html

I hope this clarifies the issue.

PS:

I respectfully request that if a user asks a question, that an explicit 
answer be given, not just a reference to the manual.  It could be then 
followed by a manual reference.  The user then has his answer and can 
look up more detail in the manual.


Thanks.

Ethan


-- 
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.