Multiple Access to Database - The Answer

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [PHP Home]     [PHP Users]     [Postgresql Discussion]     [Kernel Newbies]     [Postgresql]     [Yosemite News]

  Powered by Linux