差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

次のリビジョン
前のリビジョン
dokuwiki:mysql [2006/11/06] – 作成 administratordokuwiki:mysql [2022/03/12] (現在) – 外部編集 127.0.0.1
行 1: 行 1:
 +====== MySQLにユーザー認証をさせる ======
 +===== ファイルの準備 =====
 +  * mysql.conf.php.exampleをmysql.conf.phpにリネーム
 +  * mysql.conf.phpを編集
 +===== SQLを実行 =====
 +<code sql>
 +CREATE TABLE `users` (
 +  `uid` int(10) unsigned NOT NULL auto_increment,
 +  `login` varchar(20) NOT NULL default '',
 +  `pass` varchar(60) NOT NULL default '',
 +  `firstname` varchar(255) NOT NULL default '',
 +  `lastname` varchar(255) NOT NULL default '',
 +  `email` varchar(255) NOT NULL default '',
 +  PRIMARY KEY  (`uid`),
 +  UNIQUE KEY `login` (`login`)
 +) TYPE = MYISAM;
 + 
 +CREATE TABLE `groups` (
 +  `gid` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
 +  `name` varchar(50) NOT NULL DEFAULT '',
 +  PRIMARY KEY  (`gid`),
 +  UNIQUE KEY `name` (`name`)
 +) TYPE = MYISAM;
 + 
 +CREATE TABLE `usergroup` (
 +  `uid` int(10) UNSIGNED NOT NULL DEFAULT '0',
 +  `gid` int(10) UNSIGNED NOT NULL DEFAULT '0',
 +  PRIMARY KEY  (`uid`,`gid`)
 +) TYPE = MYISAM;
 +</code>
 +    * local.protected.phpに
 +<code php>
 +<?php
 +require_once('mysql.conf.php');
 +?>
 +</code>
  
 +===== パスワードをチェックさせる =====
 +ユーザー名が存在すると、パスワードが違っていてもログインができてしまいます。
 +
 +conf/mysql.conf.php
 +<code sql>
 +$conf['auth']['mysql']['checkPass'  = "SELECT pass
 +                                         FROM usergroup AS ug
 +                                         JOIN users AS u ON u.uid=ug.uid
 +                                         JOIN groups AS g ON g.gid=ug.gid
 +                                         WHERE login='%{user}'
 +                                         AND name='%{dgroup}'";
 +</code>
 +最後の1行をAND pass='%{pass}'";に置換。
 +
 +inc/auth/mysql.class.php
 +<code sql>
 +    function checkPass($user,$pass){
 +      $rc  = false;
 +
 +      if($this->_openDB()) {
 +        $sql    = str_replace('%{user}',$this->_escape($user),$this->cnf['checkPass']);
 +        $sql    = str_replace('%{pass}',$this->_escape($pass),$sql);
 +        $sql    = str_replace('%{dgroup}',$this->_escape($this->defaultgroup),$sql);
 +        $result = $this->_queryDB($sql);
 +</code>
 +の後ろに
 + if($result) $rc = true;
 +を挿入。
 +
 +===== xreaの文字化け対策 =====
 +inc/auth/mysql.class.php
 +  $con = @mysql_connect ($this->cnf['server'], $this->cnf['user'], $this->cnf['password']);
 +という行の後ろに
 +  mysql_query("SET NAMES utf8", $con);
 +を挿入
 +
 +===== 登録する =====
 +MySQLに切り替えると、ユーザーが空になるので、登録し直す。