Multiple Access to Database - The Answer
| From: | Ethan Rosenberg | Date: | Wed, 18 Jan 2012 23:10:35 +0000 |
| Subject: | Multiple Access to Database - The Answer | ||
| Groups: | php.db | ||
| Request: | Send a blank email to php-db+get-48173@lists.php.net to get a copy of this message | ||
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