zoukankan      html  css  js  c++  java
  • svn数据库认证方法

    1 -- apache认证方法

    平时上网访问一些网站的某些资源时,浏览器弹出一个对话框,要求输入用户名和密码来获取对资源的访问。这就是用户认证的一种技术。如在浏览器中访问SAE的SVN仓库如下提示一般:
    rz
    浏览器的用户认证技术一般是基于“用户名+密码”的形式,服务端根据二者的对应关系控制着所有登录用户的合法性,其目的是仅让合法用户以合法的权限访问服务端资源。
    SVN通用搭建方式是以Apache作为网络服务器,通过mod_dav_svn模块,操作SVN数据仓库,为用户提供版本服务。在这种搭建模式下用户可直接采用Apache的认证系统,比如使用文本文件,或者MSQL、Oracle等数据库,或者LDAP等等认证方法。对于大型SVN应用系统而言,搭建LDAP服务器来管理用户权限,更为合理,这也是我推荐的认证架构。但对于小企业或者个人用户来说,采用MySQL集中授权方式要简单方便,本文用来记录我对这种方式的摸索经历。

    2 -- mod_authz_mysql的安装

    下载mod_authz_mysql:
    http://nchc.dl.sourceforge.net/project/modauthmysql/modauthmysql/3.0.0/mod_auth_mysql-3.0.0.tar.gz
    使用如下命令进行编译:

    #如果MySQL安装在可搜索路径下,用如下方法编译
    $ /apache/bin/apxs -c -lmysqlclient -lm -lz mod_auth_mysql.c
    
    #如果MySQL安装在其他路径下,我们需要制定MySQL库的路径
    $ /apache/bin/apxs -c -I/mysql/include/mysql -L/mysql/lib/mysql -lmysqlclient -lm -lz mod_auth_mysql.c
    
    #命令行上可以同时指定多个库路径,假如按上述方法编译提醒找不到zlib库,可按如下方法编译
    $ /apache/bin/apxs -c -I/mysql/include/mysql -L/mysql/lib/mysql -L/zlib/lib  -lmysqlclient -lm -lz mod_auth_mysql.c

    但非常不幸的是,在安装mod_authz_mysql3.0.0版本时,无论采用上述哪种方法,都会出现如下一堆乱七八糟的错误:

    $ /apache/bin/apxs -c -lmysqlclient -lm -lz mod_auth_mysql.c
    /apr/build-1/libtool --silent --mode=compile gcc -prefer-pic   -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -g -O2 -pthread -I/apache/include  -I/apr/include/apr-1   -Iapr-util/include/apr-1   -c -o mod_auth_mysql.lo mod_auth_mysql.c && touch mod_auth_mysql.slo
    mod_auth_mysql.c:269:19: error: mysql.h: No such file or directory
    mod_auth_mysql.c:379: error: expected specifier-qualifier-list before 'MYSQL'
    mod_auth_mysql.c:386: warning: excess elements in struct initializer
    mod_auth_mysql.c:386: warning: (near initialization for 'connection')
    .....此处省略十万八千个字

    网上给出的解决方法是要给mod_auth_mysql.c打个补丁,该补丁可在这里下载到:
    http://www.zoosau.de/wp-content/uploads/mod_auth_mysql-300-apache-22.patch

    将该补丁文件放置到mod_authz_mysql的目录里,执行如下打补丁命令:

    $ patch < mod_auth_mysql-300-apache-22.patch 


    打补丁之后,我们按原来的编译命令重新编译,这时一般都可以成功了。检视下/apache/modules目录下是否有mod_authz_mysql.so文件,如果没有,则手工从mod_authz_mysql的编译路径下拷贝过去即可。自此mod_authz_mysql编译算是告一段落了,下面开始配置和使用之旅。

    3 -- 在apache中配置使用mod_authz_mysql

    首先,编辑apache的/apache/conf/httpd.conf配置文件加入mod_authz_mysql的加载命令:

    # LoadModule foo_module modules/mod_foo.so
    #
    LoadModule dav_svn_module  modules/mod_dav_svn.so    
    LoadModule authz_svn_module modules/mod_authz_svn.so
    LoadModule mysql_auth_module modules/mod_auth_mysql.so


    然后,创建mod_authz_mysql所用到的数据库表:

    CREATE DATABASE `db_svn`;
    
    CREATE TABLE `db_users` (
        `user_name` char(30) NOT NULL,
        `user_password` char(20) NOT NULL,
        `user_group` char(10) DEFAULT NULL,
        PRIMARY KEY (`user_name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=gbk;


    最后,在SVN的Location配置域中加入mod_authz_mysql的参数信息:

    <ifmodule mod_auth_mysql.c>
        <location repos>
            DAV svn
            SVNParentPath /data/svndata
    
            AuthType Basic
            AuthName "SAE User Auth for SVN"
            Require valid-user
    
            AuthBasicAuthoritative off
            AuthMySQLAuthoritative On
            AuthUserFile /dev/null
            AuthMySQLHost 192.168.1.118
            AuthMySQLPort 4044
            AuthMySQLUser db_user
            AuthMySQLPassword db_userpasswd
            AuthMySQLDB db_svn
            AuthMySQLUserTable db_users
            AuthMySQLEnable On
            AuthMySQLPwEncryption none
            
            AuthzSVNAccessFile /data/svnadmin/useraccess
        </location>
    </ifmodule>


    mod_authz_mysql接受的配置项说明
  • 相关阅读:
    Jenkins 基础篇
    Jenkins 基础篇
    Windows配置Nodejs环境
    Windows配置安装JDK
    Windows安装MySQL
    Ubuntu安装MySQL
    利用中国移动合彩云实现360云盘迁移到百度云
    Linux Shell下的后台运行及其前台的转换
    nova image-list 和 glance image-list 有什么区别
    启动虚拟机时提示我已移动或我已复制选项的详解
  • 原文地址:https://www.cnblogs.com/motadou/p/2485843.html
Copyright © 2011-2022 走看看