2009-12-12 60 views
1

我想在我的Apache服務器上配置一個站點,使用mod_dav_svn和mysql身份驗證。使用Mysql和Apache Subversion訪問控制

我使用一個數據庫三和用表像這樣

auth_users 
---------- 
uid username passwd 
1  UserA  pass 
2  UserB  pass 

auth_groups 
----------- 
gid group 
1  repo_rw 
2  repo_ro 

users_groups 
uid gid 
1  1 
2  2 

因此: -

用戶A是組成員repo_rw 用戶B是組的成員repo_ro

然後我用我的httpd.conf文件如下: -

<VirtualHost *:80> 
    DocumentRoot /var/www 
    ServerName repo.srv.domain.com 
    ServerPath /var/www 

    <Location /svn> 
    DAV svn 

    SVNPath /var/svn/repo 

    AuthType Basic 
    AuthName "Subversion Repository" 
    AuthUserFile /dev/null 
    AuthBasicAuthoritative Off 

    AuthMySQL_Authoritative on 
    AuthMySQL_Empty_Password off 
    AuthMySQL_Encryption_Types Plaintext 

    AuthMySQL_Password_Table "auth_users u" 
    AuthMySQL_Username_Field "u.username" 
    AuthMySQL_Password_Field "u.passwd" 

    AuthMySQL_Group_Table "auth_groups g RIGHT JOIN users_groups ug ON (ug.gid=g.gid) RIGHT JOIN auth_users u ON (ug.uid=u.uid)" 
    AuthMySQL_Group_Field "g.group" 

    <Limit GET PROPFIND OPTIONS REPORT> 
     Require group repo_rw 
    </Limit> 
    </Location> 
</VirtualHost> 

在這種配置中,我能夠讓用戶rw訪問存儲庫/ var/svn/repo,作爲此存儲庫的有效用戶進行身份驗證。

我也可以添加多個VirtualHost條目,將各個位置中的「repo」替換爲新的重新設置名稱,並提供對單個存儲庫的受控rw訪問。

我的問題是,我無法添加READ ONLY訪問存儲庫,也匿名只讀訪問。

我已經讀它應該能夠

<LimitExcept GET PROPFIND OPTIONS REPORT> 
    Require group repo_ro 
</Limit> 

添加到部分,這應該提供只讀到存儲庫訪問,但我一直沒能完成這項工作。尾巴mysql日誌只顯示repo_rw被查詢。

如果有人可以提供任何建議,我將非常感激!

回答

0

看來這種方法不起作用。網絡上有mahy資源表明它會,但似乎沒有與當前版本的apache/mysql/modules一起工作。

粒度訪問控制有兩種選擇:1)僅限auth文件,跳過mysql身份驗證並使用標準的apache auth方法,或者2)使用鉤子腳本來定義用戶具有的訪問權限。