Phpmyadmin

phpMyAdmin 中的預設使用者組

  • October 12, 2017

我正在為共享主機設置多使用者環境。從 phpMyAdmin 4.1.0 開始,可以創建使用者組,向其中添加使用者並定義他們可以使用的功能。

現在這是一個很棒的功能,但是如果新的 MySQL 使用者在第一次登錄 phpMyAdmin 時獲得一個預設使用者組會更好。我還沒有在 phpma 中看到這個設置(到目前為止),所以我想問你是否知道這在 phpma 中是否可行,或者我是否可以在 phpma 的 php 文件中設置預設使用者組?

提前致謝!

我想出了自己的解決方案(但如果您認為這可以做得更好,請發布您的選項):

在文件 /libraries/Menu.class.php 我改變了……

       if (isset($cfgRelation['menuswork']) && $cfgRelation['menuswork']) {

… 和

       $groupTable = PMA_Util::backquote($GLOBALS['cfg']['Server']['pmadb']) . "." . PMA_Util::backquote($GLOBALS['cfg']['Server']['usergroups']);
       $userTable = PMA_Util::backquote($GLOBALS['cfg']['Server']['pmadb']) . "." . PMA_Util::backquote($GLOBALS['cfg']['Server']['users']);

       if (!empty($GLOBALS['cfg']['Server']['users']) && !empty($GLOBALS['cfg']['Server']['usergroups'])) {
           $defaultUserGroup = 'User';
           $all_mysql_users = PMA_queryAsControlUser("SELECT User FROM mysql.user GROUP BY User", false);
           $all_phpma_users = PMA_queryAsControlUser("SELECT username FROM " . $userTable . " WHERE `usergroup` != ''", false);

           if ($all_mysql_users) {
               $default_user_group = PMA_queryAsControlUser("SELECT `usergroup` FROM " . $groupTable . " WHERE `usergroup` LIKE '" . $defaultUserGroup . "' LIMIT 1", false);

               if ($default_user_group) {
                   $default_user_group = $GLOBALS['dbi']->fetchAssoc($default_user_group);
                   $allPhpmaUsers = array();

                   while ($phpma_user = $GLOBALS['dbi']->fetchAssoc($all_phpma_users))
                       $allPhpmaUsers[] = $phpma_user['username'];

                   while ($mysql_user = $GLOBALS['dbi']->fetchAssoc($all_mysql_users)) {
                       if (!in_array($mysql_user['User'], $allPhpmaUsers))
                           PMA_setUserGroup($mysql_user['User'], $default_user_group['usergroup']);
                   }
               }
           }
       }

       if (isset($cfgRelation['menuswork']) && $cfgRelation['menuswork']) {

然後我換了…

       if (isset($cfgRelation['menuswork']) && $cfgRelation['menuswork']) {
           $groupTable = PMA_Util::backquote($GLOBALS['cfg']['Server']['pmadb'])
               . "."
               . PMA_Util::backquote($GLOBALS['cfg']['Server']['usergroups']);
           $userTable = PMA_Util::backquote($GLOBALS['cfg']['Server']['pmadb'])
               . "." . PMA_Util::backquote($GLOBALS['cfg']['Server']['users']);

           $sql_query = "SELECT `tab` FROM " . $groupTable

… 和

       if (isset($cfgRelation['menuswork']) && $cfgRelation['menuswork']) {
           $sql_query = "SELECT `tab` FROM " . $groupTable

然後我創建了一個具有所有權限的使用者組“Admin”,將 root 使用者放入這個 Admin 組。最後我創建了一個權限較少的使用者組“使用者”,刷新了頁面,所有其他使用者都有這個組。按此順序執行此操作**很重要,因為否則 root 使用者也將獲得“使用者”權限。**當該組無法編輯使用者設置時,您無法從 phpMyAdmin 中將其更改回來。

引用自:https://dba.stackexchange.com/questions/85992