手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网络编程>Mysql>列表

Linux应用集成MySQL数据库访问技巧

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!


下面的代码是使用正式MySQL C API MySQL 以C 编写的等价脚本。该版本的优势在于他是编译型的,因此比解释语言更快。经常用在特定站点的数据库代码应该以C或C 编写,然后由脚本或直接由Web服务器访问,以改进整体运行时间。

C 示例





#include 

#include 

#include 



const char *DBNAME = "clientWebSite";

const char *DBTABLE = "products";

const char *DBHOST = "backend.company.com";

const char *DBUSER = "mysqluser";

const char *DBPASSWD = "abigsecret":



int main() {

  try {

    //open the database connection and query

    Connection con(DBNAME, DBHOST, DBUSER, DBPASSWD);

    Query query = con.query();



    //write valid sql code to the query object

    query << "select * from " << DBTABLE;



    //run the query and store the results

    Result res = query.store();



    //write out the html table header

    cout << "<table border=4>\n";

    cout << "<th>Product Id <th width=200>Description"

 << "<th>Price ($)" << endl;



    Result::iterator curResult;

 Row row;



    //iterate over each result and put it into an html table

    for (curResult = res.begin(); curResult != res.end(); curResult  ) {

      row = *curResult;

      cout << "<tr><td align=center>" << row[0]

         << "<td>" << row[1]

         << "<td>" << row[2] << endl;



    }

    cout << "</table>" << endl;



  } catch (BadQuery er) {

    // handle a bad query (usually caused by a sql syntax error)

    cerr << "Error: " << er.error <<  endl;

    return -1;



  } catch (BadConversion er) {

//handle conversion errors out of the database as well

    cerr << "Error: Can't convert \"" << er.data << "\" to a \""

 << er.type_name << "\"." << endl;

    return -1;

  }

  return 0;

}


安全性

在Web上创建以Web支持的应用有一些研发者需要考虑的问题。任何有关Web服务器上CGI程式的问题,例如Web服务器处理许可权和脚本方的输入检查,也仍然需要考虑。

除此之外,维护数据库系统的安全性也很有必要。这涉及保护数据库服务器的许可权系统,连同使从数据库客户机到服务器的连接安全。

MySQL提供了深入的安全性系统,有人形容他是“高级但不标准”。MySQL允许根据用户名、客户机主机和要访问的数据库对客户机进行访问。要创建安全的系统,让任何用户使用强口令,不要给他们任何他们不是绝对需要的访问权。这包括表面上无害的特权,例如能够让用户查看任何正在运行的进程(包括更改其他用户口令的那些)的处理特权。最好的办法是以无特权的Unix用户运行服务器进程本身,这样假如一个数据库被泄露,也不至于击垮整个系统。这和以用户nobody而非root用户运行httpd类似。 描述系统访问的表是作为单独的MySQL数据库存储的,能够由MySQL root用户更新。 请注意,MySQL服务器根据MySQL用户名授予特权,这些用户名和Unix用户名不同。但是,有一个MySQL root用户名,他对数据库有全部权限。一旦服务器确定了连接客户机是谁,连同他们在尝试连接什么之后,就根据给定的一组权限来控制访问权。要防止访问表中主机名被DNS电子欺骗,能够输入任何主机的IP地址,或请求服务器将IP地址解析回原始主机名来使其他人截获DNS请求和回答更困难。

除了服务器访问表以外,和服务器的通信也必须很安全。从客户机登录到服务器上时,口令不以纯文本方式发送;但是任何后续 SQL 命令将以纯文本方式发送。为达到更高的安全性,使用ssh来配置端口转发。他将服务器和客户机之间的任何通信进行加密,防止有人在传输中观察他。来自客户机的数据发送到客户机本地机器中本地ssh服务器所侦听的端口上。他由本地ssh服务器使用,加密后发送给远程ssh服务器,由他进行解密并转发到 MySQL服务器端口。

在实际中,最安全的方法是在 Web 服务器所在的机器上运行数据库服务器,并让由Web服务器产生的CGI脚本通过UNIX(本地)套接字和MySQL服务器进行通信。该配置能够让数据库管理员禁用任何和MySQL服务器的远程连接。假如Web和数据库服务器必须位于不同的机器上,加密他们之间的任何通信,或将两台机器通过其自己专用的、物理上隔离的网络连接。只创建一个由Web服务器使用的用户帐户(除 root 用户外)以登录到数据库服务器。

由数据库驱动的网站是一些功能强大的工具,能够让研发者创建提供更新信息的动态站点,并让由客户机发起的更改在多个会话之间持续。后端数据库的使用对于管理电子贸易和其他应用的用户来说必不可少。通过使用可免费获得的软件,有可能建立由数据库驱动的站点,安全地将数据库连通性集成到站点现有的CGI体系结构中。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!