使用 MySQL 的 SVN 身份验证

Posted

技术标签:

【中文标题】使用 MySQL 的 SVN 身份验证【英文标题】:SVN Authentication using MySQL 【发布时间】:2012-08-28 16:58:06 【问题描述】:

我正在尝试通过 mysql 设置每个存储库的 SVN 身份验证,但我遇到了一些问题。

首先mod_authn_dbdmod_auth_mysql有什么区别?

其次,我已经有一个 MySQL 数据库设置,其中包含一个用于用户、组和权限的表。是否可以使用这些模块中的任何一个链接到我当前的权限系统,其中需要用户名、密码和权限才能访问存储库(最好具有每个存储库的读取权限和写入权限)

tbl_users:user_id、user_name、user_hash

tbl_group: group_id, group_name

tbl_permission:permission_id,permission_name

tbl_user_group: user_id, group_id

tbl_group_permission: group_id, permission_id

tbl_user_permission: user_id, permission_id

【问题讨论】:

【参考方案1】:

首先是区别。

mod_authn_dbd 提供 mod_auth_digest 和 mod_auth_basic 等身份验证前端,通过在 SQL 表中查找用户来对用户进行身份验证。

mod_auth_mysql 是一个 Apache 模块,它允许使用存储在 MySQL 数据库中的用户和组数据进行身份验证。该项目自 2005 年以来似乎没有更新,所以我会选择 mod_authn_dbd。

要正确设置它,首先您需要在 apache 配置中正确配置 mod_authn_dbd 和 mod_dbd,mod_dbd 负责您的数据库连接。完成此操作后(确保您的 Apache 在这些模块处于活动状态的情况下运行),然后您可以继续配置它们。

在你的 apache 配置中添加这样的东西来配置数据库连接:

<IfModule mod_dbd.c>
  DBDriver mysql
  DBDParams "host=(your_db_server, p.e. 127.0.0.1) dbname=your_db_name user=your_db_user pass=your_db_pass"
  DBDMin 1
  DBDKeep 8
  DBDMax 20
  DBDExptime 200
</IfModule> 

现在将所需的身份验证配置添加到 apache 配置中:

<Directory "/your/svn/repository/path/">
  Options FollowSymLinks Indexes MultiViews
  AuthType Basic
  AuthName "Allowed users Only"
  AuthBasicProvider dbd
  AuthDBDUserPWQuery "SELECT pwd FROM tbl_users, tbl_user_group WHERE tbl_users.user_id=%s AND tbl_user.user_id=tbl_user_group.user_id"
  Require valid-user
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>

我已经简化了 SELECT 语句以获得更好的可读性,您必须扩展它以优化您的配置。

编辑:

打字后我在网上找到了一个很好的例子,也许也读一下here。它比我的简化答案要深入得多。

【讨论】:

以上是关于使用 MySQL 的 SVN 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

使用 git-svn 创建上游分支时无法进行身份验证

删除缓存的svn身份验证文件

在 SVN 中如何覆盖自动 Windows 域身份验证

在CentOS 6.3上使用svn://协议时,获取E210007无法协商身份验证机制

WebSVN - 存储库中路径的身份验证

mysql数据库没有客户端身份验证插件怎么解决