-2

スーパー管理者がアプリケーション自体から権限を変更できるように、データベース内の値の編集、表示、削除などのアクセス権をphpで動的にユーザーに提供する必要があります(データベースを開いてそれぞれに対して行う必要はありません。すべてのユーザー)。

4

1 に答える 1

1

おそらく、createdbとusermysqlを使用して複製し、特権phpを設定します。

mysqlデータベースがあるとしましょう:

mysql_connect('localhost','user',password);
mysql_query("CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';");
mysql_query("GRANT ALL ON db1.* TO 'username'@'localhost'");
mysql_query("CREATE DATABASE newdatabase");
mysql_close();

mysqlデータベースでのアクセス許可の詳細についてはhttp://dev.mysql.com/doc/refman/5.1/en/grant.htmlを、データベースユーザーの作成についてはhttp://dev.mysql.com/doc/refman/5.1を参照してください。 /en/create-user.html

後で編集

$user_priviledges = array(
                       '__SELECT__' => array("select_user","password"),
                       '__SELECT_DELETE__' => array("select_delete_user","password")
                    );
// first you use just __SELECT__ user for getting the current user access information
mysql_connect('localhost', $user_priviledges['__SELECT__'][0], $user_priviledges['__SELECT__'][1]);
mysql_select_db('my_db');
$sql = mysql_query("SELECT user_access FROM access WHERE user_id='$my_loged_user_id'");
$row = mysql_fetch_array($sql);
if ($row['user_access'] != '__SELECT__') {
    mysql_close();

    // after you close the above mysql connection we can connect again with the real user access 
    mysql_connect('localhost', $user_priviledges[$row['user_access']][0], $user_priviledges[$row['user_access']][1]);
    mysql_select_db('my_db');
}

// my rest of code

mysql_close();

システムのユーザーとユーザーアクセスに注意する必要があります。そのためには、システム(またはユーザー)が何をしようとしているかに応じて、mysql接続を開閉するクラスを実装する必要があると思います。

PHPの古いmysql関数の代わりにMySQLiを使用することをお勧めします。

于 2012-10-26T06:14:50.987 に答える