2009-12-12 8 views
1

Я пытаюсь настроить сайт на моем сервере Apache, чтобы использовать mod_dav_svn с аутентификацией mysql.Контроль доступа Subversion с использованием Mysql и Apache (mod-dav-svn, mod-auth-sql, apache, mysql)

Я использую базу данных с тремя таблицами, как этот

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 

Поэтому: -

UserA является членом группы repo_rw UserB является членом группы 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» в разных местах на новое имя reposiotry и предоставив доступ к отдельным репозиториям с помощью rw.

Моя проблема в том, что я не могу добавить ТОЛЬКО доступ только к репозиториям, а также анонимный доступ для чтения.

Я прочитал это должно быть возможно добавить

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

к секции и это должно обеспечить доступ только для чтения к хранилищу, однако я не был в состоянии сделать эту работу. В хвосте журнала mysql отображается только запрос repo_rw.

Если кто-нибудь может дать какие-либо советы, я был бы чрезвычайно благодарен!

ответ

0

Кажется, что этот метод просто не работает. В сети есть ресурсы mahy, предполагающие, что это произойдет, но никто не работает с текущими версиями apache/mysql/modules.

Существует два варианта контроля гранулярного доступа: 1) только файлы auth, пропускать аутентификацию mysql и поддерживать стандартные методы apache auth или 2) сценарии сумасшедшего крюка, чтобы определить, какие пользователи доступа.