MySQL
  Home arrow MySQL arrow Page 3 - The MySQL Grant Tables
Dev Shed Forums 
Administration  
AJAX  
Apache  
BrainDump  
DHTML  
Flash  
Java  
JavaScript  
Multimedia  
MySQL  
Oracle  
Perl  
PHP  
Practices  
Python  
Reviews  
Security  
Style-Sheets  
Web Services  
XML  
Zend  
Zope  
Forums Sitemap 
IBM® developerWorks 
Sun Developer Network 
Dedicated Servers 
E-Commerce Hosting 
Linux Web Hosting 
Managed Hosting 
Small Business Hosting 
Moblin 
JMSL Numerical Library 
VPS Hosting 
Weekly Newsletter

 
Developer Updates  
Free Website Content 
 RSS  Articles
 RSS  Forums
 RSS  All Feeds
Write For Us Get Paid 
Request Media Kit
Contact Us 
Site Map 
Privacy Policy 
Support 
 USERNAME
 
 PASSWORD
 
 
  >>> SIGN UP!  
  Lost Password? 
MYSQL

The MySQL Grant Tables
By: W.J. Gilmore
  • Search For More Articles!
  • Disclaimer
  • Author Terms
  • Rating: 4 stars4 stars4 stars4 stars4 stars / 14
    1999-03-01

    Table of Contents:
  • The MySQL Grant Tables
  • Access Control
  • Tables_priv and columns_priv
  • References

  • Rate this Article: Poor Best 
      ADD THIS ARTICLE TO:
      Del.ici.ous Digg
      Blink Simpy
      Google Spurl
      Y! MyWeb Furl
    Email Me Similar Content When Posted
    Add Developer Shed Article Feed To Your Site
    Email Article To Friend
    Print Version Of Article
    PDF Version Of Article
     
     
    ADVERTISEMENT


    The MySQL Grant Tables - Tables_priv and columns_priv


    (Page 3 of 4 )

    The tables_priv and columns_priv grant tables is two of the more recent additions to the MySQL database server. They are intended to provide the user with even greater control over the user's actions while connected to the server. Both are very similar to the db grant table, but with an even more specified range of purpose; a given table contained within a given database. Whereas the superuser could previously limit a user's actions within a database via the db grant table, the superuser can now limit a user's actions on a per-table basis and per-column basis. Understandably, this provides the superuser with a very flexible array of options to work with.

    Before we look further into each table, please read carefully the following characteristics:

    • Wildcards are permitted within the host field of both tables, but are not permitted within the Db, Table_name and Column_name fields.
    • Both tables are sorted similarly to the db table, but is much easier since only the host column can hold wildcards.
    • The privilege fields are declared as 'SET' fields.
    • The tables_priv and columns_priv tables should ONLY be modified via GRANT/REVOKE commands. Attempts to insert data into these tables using 'INSERT' commands will result in a problematic server!
    • The table_priv column within the tables_priv table allows the following: 'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter'.
    • The column_priv column within the tables_priv table allows the following: 'Select', 'Insert', 'Update', 'References'.
    • The type column within the columns_priv table allows the following: 'Select', 'Insert', 'Update', 'References'.

    Note:

    • 'References' is not yet implemented.
    • 'usage' simply means a user with no privileges.

    The tables_priv grant table

    The following is a diagram of the tables_priv table:

    Table name: tables_priv columns_priv
    Scope fields: Host Host
    Db Db
    User User
    Table_name Table_name
    Column_name
    Privilege fields: Table_priv Type
    Column_priv
    Other fields: Timestamp Timestamp
    Grantor



    Column definitions:

    • Host - For what host does this apply?
    • Db - For what db connected from the above host does this apply?
    • User - For what user from the above host does this apply?
    • Table_name - For which table within the above Db does this apply?
    • Table_priv - What privileges are allowed for this table?
    • Column_priv - What privileges are allowed for the columns contained within this table?
    • Timestamp - When was this privilege granted?
    • Grantor - Who granted the 'User' this privilege?

    Perhaps the only way to truly understand how the tables_priv table is used is through examples. Let's take a look at a few of them.

    Example #1:


    %>GRANT SELECT ON italy TO wj@314interactive.com;

    What does this accomplish?
    The above command allows user 'wj' from host '314interactive.com' to perform a 'SELECT' statement on the table 'italy'. Remember that this table would be referred to only if there was a 'N' within the 'SELECT' column of the 'db' or 'host' table regarding the given database/host and given username. If there was a 'Y' within the 'SELECT' column of the 'db' or 'host' table regarding the given database/host and given username, then there would be no need to control the tables_priv table.

    Example #2:


    %>GRANT SELECT, INSERT ON oats.italy TO wj@314interactive.com;

    What does this accomplish?
    The above command allows user 'wj' from host '314interactive.com' to perform 'SELECT' and 'INSERT' statements on the table 'italy' residing within the 'oats' database.

    Example #3:


    %>REVOKE SELECT on oats.italy from wj@314interactive.com

    What does this accomplish?
    The above command revokes 'SELECT' privileges from user 'wj' from host '314interactive.com' pertaining to the table 'italy' contained within the database 'oats'.

    It is important to understand that the information contained within the tables_priv only comes into effect when the host/db tables deny the user the necessary privileges to perform the requested function. If the given privilege were 'Y' within the host/db table, then there would be no need to even look at the tables_priv table.

    Example #4: ( A slight bit more complicated)


    %>GRANT SELECT(id,name,address,phone),update(address,phone) ON company.customers TO gilmore@314interactive.com;

    What does this accomplish?
    The above command grants SELECT privileges for the 'id', 'name', 'address', and 'phone' columns, and UPDATE privileges for the 'address' and 'phone' columns within the 'customers' table, contained within the 'company' database.
    What does this affect?
    This command modifies both the tables_priv table and the columns_priv tables. This is because it refers to both the table and specific columns residing within the table.

    Example #5:


    %>REVOKE UPDATE(address,phone) ON company.customers FROM gilmore@314interactive.com;

    What does this accomplish?
    This revokes UPDATE privileges for the address and phone columns contained within the 'customers' table residing within the company database.
    What does this affect?
    Since the command makes direct references to the columns contained within the given table, the columns_priv table is updated as well as the tables_priv table.

    Although stated previously within this article, it is of enough importance that it should be repeated; Grant tables are only used if needed. For example, if the table of higher precedence provides adequate privileges, than the lower table precedences will not be consulted. If the higher-precedence table contains 'N' within the requested command, then the lower-precedence table will be consulted. Simple as that.

    Note from Monty: GRANT will create a new user if the user didn't exist for before and that one can add a password for a new user with the IDENTFIED BY 'password' syntax.

    I have compiled a short list of references pertaining to the MySQL grant tables on the following page. Please feel free to review each.

    More MySQL Articles
    More By W.J. Gilmore


     

       

    MYSQL ARTICLES

    - Take Some Load off MySQL with MemCached
    - MySQL Table Prefix Changer Tool in PHP
    - Using the SIGNAL Statement for Error Handling
    - Error Handling Examples
    - Error Handling
    - Completing a Search Engine with MySQL and PH...
    - Paginating Result Sets for a Search Engine B...
    - Building a Search Engine with MySQL and PHP 5
    - Using Boolean Operators for Full Text and Bo...
    - PHP, MySQL and the PEAR Database
    - Working with PHP and MySQL
    - Getting PHP to Talk to MySQL
    - Creating an RSS Reader: the Reader
    - MySQL Security Overview
    - Creating the Admin Script for a PHP/MySQL Bl...





    © 2003-2008 by Developer Shed. All rights reserved. DS Cluster 5 hosted by Hostway