Database Articles
  Home arrow Database Articles arrow Page 3 - Authentication Protocol Security
Codewalker Forums 
  Tutorials  
Database Articles  
Miscellaneous  
Navigation Usability  
PEAR Articles  
Programming Basics  
Server Administration  
XML Tutorials  
  Reviews  
Database Book Reviews  
Linux Book Reviews  
Miscellaneous Reviews  
PHP Book Reviews  
PHP Software Reviews  
Server Admin Reviews  
SQL Tool Reviews  
  Code Gallery  
Content Management Code  
Contest Code  
Counters Code  
Database Code  
Date Time Code  
Discussion Board Code  
Email Code  
File Manipulation Code  
GUI Code  
Link Farm Code  
Miscellaneous Code  
Search Code  
Site Navigation Code  
User Management Code  
Mobile Linux 
App Generation ROI 
IBM® developerWorks 
Download TestComplete 
Forums Sitemap 
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? 
DATABASE ARTICLES

Authentication Protocol Security
By: O'Reilly Media
  • Search For More Articles!
  • Disclaimer
  • Author Terms
  • Rating: 3 stars3 stars3 stars3 stars3 stars / 2
    2007-08-17

    Table of Contents:
  • Authentication Protocol Security
  • Authenticating Handshake
  • Command Packet
  • Server Responses
  • OK Packet
  • Error Packet
  • Result Set Packets

  • 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


    Authentication Protocol Security - Command Packet


    (Page 3 of 7 )

    Once the authentication is complete, the client begins sending commands to the server using command packets. The body of a command packet is documented in Table 4-6.

    Table 4-6. Format of client command packet

    Offset in the body Length Description
    0 1 Command code.
    1

    For the noncompressed packet, total packet length from the header – 1. For the compressed packet, the compressed body length – 1.

    The argument of the command, if present.

    The command codes are contained in enum server_command , defined in include/mysql_com.h. The command-handling logic can be found in the switch statement of dispatch_command() in sql/sql_parse.cc.

    Table 4-7 documents different types of commands with their codes and arguments.

    Table 4-7. Client commands

    Command code enum value Code numeric value Argument description Command description
    COM_SLEEP 0 No argument. Never sent by a client. Reserved for internal use.
    COM_QUIT 1 No argument. Tells the server to end the session. Issued by the client API call mysql_close() .
    COM_INIT_DB 2 A string containing the name of the database.Tells the server to change the default database for the session to the one specified by the argument. Issued by the client API call mysql_select_db() .
    COM_QUERY 3 A string containing the query. Tells the server to run the query. Issued by the client API call mysql_query() .
    COM_FIELD_LIST 4 A string containing the name of the table.Tells the server to return a list of fields for the specified table. This is an obsolete command still supported onthe server for compatibility with old clients. Newer clients use the SHOW FIELDS query.
    COM_CREATE_DB 5 A string containing the name of the database.Tells the server to create a database with the specified name. This is an obsolete command still supported on the server for compatibility with old clients. Newer clients use the CREATE DATABASE query.
    COM_DROP_DB 6 A string containing the name of the database.Tells the server to drop the database with the specified name. This is an obsolete command still supported on the server for compatibility with old clients. Newer clients use the DROP DATABASE query.

    Table 4-7. Client commands (continued) 

    Command code enum value Code numeric value Argument description Command description
    COM_REFRESH 7 A byte containing the bit mask of reloading operations.Tells the server to refresh the table cache, rotate the logs, reread the access control tables, clear the host name lookup cache, reset the status variables to 0, clear the replication master logs, or reset the replication slave depending on the options in the bit mask. Issued by the client API call mysql_refresh() .  
    COM_SHUTDOWN 8 No argument. Tells the server to shut down. Issued by the client API call mysql_shutdown() .
    COM_STATISTICS 9 No argument. Tells the server to send back a string containing a brief status report. Issued by the client API call mysql_stat() .
    COM_PROCESS_ 10 No argument. Tells the server to send back a report on the status of all running threads. This is an obsolete command still supported on the server for compatibility with old clients. Newer clients use the SHOWPROCESSLIST query.
    COM_CONNECT 11 No argument.

    Never sent by a client. Used for internal purposes.

    COM_PROCESS_ 12 A 4-byte integer with the low byte first containing the MySQL ID of the thread to be terminated.

    Tells the server to terminate the thread identified by the argument. Issued by the client API call mysql_kill() . This is an obsolete command still supported on the server for compatibility with old clients. Newer clients use the KILL query.

    COM_DEBUG 13 No argument.

    Tells the server to dump some debugging information into its error log. Issued by the client API call mysql_dump_
    debug_info() . 

    COM_PING 14 No argument.

    Tells the server to respond with an OK packet. If the server is alive and reachable, it will. Issued by the client API call mysql_ping() .

    Table 4-7. Client commands (continued)

    Command code

     

     

     

    enum value

    Code numeric value

    Argument description

    Command description

    COM_TIME

    15

    No argument.

    Never sent by a client. Used for internal purposes.

    COM_DELAYED_

    16

    No argument.

    Never sent by a client. Used for internal purposes.

    COM_CHANGE_USER

    17

    A byte sequence in the following format: zero-terminated user name, encrypted password, zero-terminated default database name.

    Tells the server the client wants to change the user associated with this session. Issued by the client API call mysql_change_user().

    COM_BINLOG_DUMP

    18

    A byte sequence in the following format: 4-byte integer for the offset, 2-byte integer for the flags, 4-byte integer for the slave server ID, and a string for the log name. All integers are formatted with the low byte first.

    Tells the server to send a continuous feed of the replication master log events starting at the specified offset in the specified log. Used by the replication slave, and in the mysqlbinlog command-line utility.

    COM_TABLE_DUMP

    19

    A byte sequence in the following format: 1 byte for database name length, database name, 1 byte for table name length, table name.

    Tells the server to send the table definition and data to the client in raw format. Used when a replication slave receives a LOAD DATAFROMMASTERquery.

    COM_CONNECT_OUT

    20

    No argument.

    Never sent by a client. Used for internal purposes.

    COM_REGISTER_
    SLAVE

    21

    A byte sequence in the following format: a 4-byte integer for the server ID, then a sequence of 1 byte-length prefixed strings in the following order: slave host name, slave user to connect as, slave user password. Then a 2-byte slave user port, 4-byte replication recovery rank, and another 4-byte field that is currently unused. All integers have the low byte first.

    Tells the replication master server to register the slave using the information supplied in the argument. THis command is a remnant of the started fail-safe replication project. It was introduced in the early version 4.0, but not much has changed since. It is possible that this commange might get removed in the future versions.

    COM_PREPARE

    22

    A string containing the statement.

    Tells the server to prepare the statement specified by the argument. Issued by the client API call mysql_stmt_prepare(). New in version 4.1.

    COM_EXECUTE

    23

    A byte sequence in the following format: 4-byte statement ID, 1 byte for flags, and 4-byte iteration count. All integers have the low byte first.

    Tells the server to execute the statement referenced by the statement ID. Issued by the client API call mysql_stmt_execute(). New in version 4.1.

    Table 4-7. Client commands (continued)

    Command code

     

     

     

    enum value

    Code numeric value

    Argument description

    Command description

    COM_LONG_DATA

    24

    A byte sequence in the following format: 4 byte statement ID, 2 byte parameter number, parameter string. Both integers have the low byte first.

    Tells the server the packet contains the data for one bound parameter in a prepared statement. Used to avoid unnecessary copying of a large amount of data when the value of the bound parameter is very long. Issued by the client API call mysql_stmt_send_
    long_data(). New in version 4.1.

    COM_CLOSE_STMT

    25

    4-byte statement ID with the low byte first.

    Tells the server to close the prepared statement specified by the statement ID. Issued by the client API call mysql_stmt_close(). New in version 4.1.

    COM_RESET_STMT

    26

    4-byte statement ID with the low byte first.

    Tells the server to discard the current parameter values in the prepared statement specified by the statement ID that may have been set with COM_LONG_DATA. Issued by the client API call mysql_stmt_reset(). New in version 4.1. 

    COM_SET_OPTION

    27

    2-byte code for the option, low byte first.

    Tells the server to enable or disable the option specified by the code. At this point, seems to be used only to enable or disable the support of multiple statements in one query string. Issued by the client API call mysql_set_server_
    option(). New in version 4.1.

    COM_END

    28

    No argument.

    Never sent by a client. Used for internal purposes.

    When MySQL developers add a new command, to keep the backward compatibility for the older clients, all new commands are added immediately before COM_END in the enum server_command . Adding it anywhere else would alter the numeric codes of the commands and thus break all of the commands after the point of the insertion in older clients. This requirement allows us to easily track the history of features to a certain extent. For example, we can tell that prepared statements were added after replication because COM_PREPARE follows COM_BINLOG_DUMP .

    More Database Articles Articles
    More By O'Reilly Media


     

    Buy this book now. This article is excerpted from the book Understanding MySQL Internals, written by Sasha Pachev (O'Reilly, 2007; ISBN: 0596009577). Check it out today at your favorite bookstore. Buy this book now.

    DATABASE ARTICLES ARTICLES

    - More on Query Optimization for Oracle Databa...
    - Query Optimization in Oracle
    - Clusters and Other Data Structures for Oracle
    - Using Indexes with an Oracle Database
    - The Basics of Data Structures in Oracle
    - Oracle Data Structures
    - Best Practices for PL/SQL Variables
    - What`s Code Without Variables?
    - Clauses, Sorting, and SQL Queries
    - The From Clause and SQL Queries
    - Query Primer
    - Full Text Searches and Strings
    - Searching with Strings
    - Pattern Matching with Strings
    - Working with Cases of Strings





    © 2003-2009 by Developer Shed. All rights reserved. DS Cluster 4 Hosted by Hostway
    For more Enterprise Application Development news, visit eWeek