【求助】請教一個 mysql 的 user 權限問題 - PCZONE 討論區

返回   PCZONE 討論區 > ▲ ADSL_CABLE_FTTH 寬 頻 上 網 討 論 > -- 網站架設 / 免費空間 / 虛擬主機 專區 > ☉ -- 架 站 DIY 討 論 版


PCZONE 討論區



通知

☉ -- 架 站 DIY 討 論 版 有了寬頻後,可利用來架設 WWW / FTP / MAIL 等各種 SERVER,請在此版跟大家一起討論各種 SERVER 架設心得。

會員
【求助】請教一個 mysql 的 user 權限問題
我的 server 環境是:
xp pro + appserv v2.5.1(mysql4,php5..)

由於剛安裝完 appserv ,所以想改變 root 的密碼.
但在 xp 的文字命令模式下執行:
mysql -u user1 -p
後卻發現以 user1(非 root 帳戶)登入資料庫後,我竟然可"查詢"與"修改" database: mysql 的資料表,例如:
use mysql;
update user set password=password('12345') where user='root';

ps. user1 只是一般帳戶

----------------------------------------------------------------------------------------------
Q1:
請問這正常嗎...如此豈不很危險!?

Q2:
另外想請教 server side 的 *.php 在什麼情況下會被盜取?
是否完全無法被 client 端的訪客盜取呢?

回覆
校長兼撞鐘

Appserv 預設權限本就是如此
你可進入 phpMyAdmin 點選 "權限" 去修改

或參考這篇文章去修改:
http://sfs.tceb.edu.tw/file/AppServ.htm

ps:這篇文張貼到防毒/防駭版有點不適當 , 應該扯不上關係吧
回覆
會員

哪尼!
您是說 APPSERV 預設可讓其他帳戶去查詢與更改 ROOT 的密碼...這是真的嗎??


我利用 PHPMYADMIN 介面的權限去看 USER1 發現其除了一些基本的權限如 SELECT , UPDATE , INSERT...等並無系統管理的權限啊...Why???

我上文舉的 USER1 帳戶是我自己後來新增的,主要用來做為BLOG登入與連線資料庫專用,當初設定如下:
grant all on myblog.* to user1@localhost identified by '12345';
實在搞不懂為何其有那麼大的權限...還是我指令下的不周全呢?

===========================================
我剛剛試了一下發現即便下了以下權限指令:
grant select on myblog.* to user1@localhost identified by '12345';

user1 仍然可以更改 root 的密碼!.....Why???
我不是已經限定 user1 的權限只有在 myblog.* 了嗎...為何其可去動到位於mysql 資料庫中的 user 資料表裡的 root 的資料呢???
回覆
會員

我已將 User , Password 值為空字串的都刪除了!
以我的 user 表來看,僅剩下兩筆資料亦即: root 與 user1

=========================================
我剛剛試了一下發現即便下了以下權限指令:
grant select on myblog.* to user1@localhost identified by '12345';

且資料庫有重新啟動,只是
user1 仍然可以更改 root 的密碼!
我明明已經限定 user1 的權限只有在 myblog.* ,為何其仍可去動到位於mysql 資料庫中的 user 資料表裡的 root 的密碼呢 ???

照理說, user1 應該連:
use mysql;
select * from user;
都作不了的...,不是嗎?


以下列出最終 user 表的查詢結果:
file

首先,我上文的權限設定指令只給了user1 "select" 的權限,但此查詢結果的 user1 根本就天差地遠地多了許多權限.

其次是 user1 根本就無"系統管理"的相關權限,而我上文也說過其權限僅限制在 mtblog.* 的所有資料表...真不知為何以 user1 登入 MySQL 後竟還可以改掉 root 的密碼???
回覆
會員

以下是我找到的答案,順便post上來給有同樣問題的人參考.
===================================
mysql.user table 裡的 priv 屬於 global level 權限,意謂可以針
對server上的任何一個資料庫!!!

可以用
REVOKE ALL PRIVILEGES ON *.* FROM user
來移除所有 global level 權限

grant select on myblog.* to user1@localhost identified by '12345';
只會變更 db level 權限, 並記錄在mysql.db! 另外,如原本即無此使用者
user table 會預設 priv 欄位值皆為'N'喔!
--
權限的 level 總共有:
global, db, table, column, Routine level
回覆
會員

大致上有較了解了,再請教一些事以確定我的觀念正確與否.....感激不盡!


Q1:
在 user 表中的欄位 *_priv (如 Select_priv) 是否都算是 global level 權限?


Q2:
若是,
則執行 grant all on 論壇.* to 帳戶@localhost identified by '密碼';
是否只會變更db level 權限, 並記錄在 mysql.db,亦即如此做並不會有 global level 權限的安全性問題?

也就是執行 grant all on 論壇.* to 帳戶@localhost identified by '密碼';
與 user 表中的欄位 *_priv 之值無關?


Q3:
若是,
請問執行 grant all on 論壇.* to 帳戶@localhost identified by '密碼';
後,在 user 表中的所有 *_priv 欄位的值是 "Y" 或 "N" 呢?


Q4:
請教如設定與更改某帳戶的 global level 權限 ?


Q5:
該如何完整刪除某個已存在帳戶呢?
回覆
會員

A1:yes
A2:yes,yes
A3:user中的*_priv預設都會為N
A4:以root權限進入作設定,如:grant select on *.* to 帳號@localhost;
A5:
以root權限進入:
DROP USER user;
或者
delete from user where user.user='帳號';
delete from db where db.user='帳號';
回覆
會員

嗯,再請教:

Q1:
如果把MYSQL資料庫中的資料表:user,db,user_info,tables_priv,procs_priv,columns_priv中的User欄位有欲刪除帳號的資料逐一刪除如下:
delete from user where user='帳號';
...
...
delete from columns_priv where user='帳號';

如此與DROP USER '帳號';的效果有何差別?


Q2:
官網有提到:自MySQL 4.1.2後可以如下指令完整刪除包含---
all global, database-, table-, and column-level privileges 的帳戶:

REVOKE ALL PRIVILEGES, GRANT OPTION FROM usera;

....為怕我會錯意,想先確定再來執行,謝謝!

回覆
會員

自問自答:

a1:
一樣,後者比較方便!

至於 DROP USER 有幾點要注意:
"5.0.1版本以前"只能 drop 沒有任何權限的 user ,所以要先用以下指令移除權限:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM usera@localhost;
再執行:
DROP USER usera@localhost;


a2:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user1@localhost;
以上的指令做完後,只需再做完如下指令就完成刪除user1的所有工作!
DELETE FROM USER WHERE USER='user1';
回覆
會員

關於單引號的使用時機(以下是我在網上查到的資訊,但無法百分百確定):

->單引號問題只有在例如:'USER-1'@'%'才需強制加上.
帳戶若無"-",主機若無"-"或"%"則可加可不加.




關於刪除帳戶 usera 我做了以下整理:

------------------------------------------------------------------
首先釐清:
下行指令只會移除 usera 的所有 global權限
(亦即位於 mysql.user 表中的所有權限欄位設定)
REVOKE ALL PRIVILEGES ON *.* FROM 'usera'@'localhost'

------------------------------------------------------------------
若要完整刪除帳戶 usera (亦即包含'該帳戶資料'及'所有表相關的權限設定'),自從
MySQL v4.1.2 後,有以下 3 個方法可用:


1.先移除權限再刪除

A.移除權限(all global, database-, table-, and column-level privileges)
.如果user資料表的Host為%
REVOKE ALL PRIVILEGES, GRANT OPTION FROM usera;

.否則(方法)
revoke all privileges ,grant option from usera@localhost(或其他明確主機名);

B.刪除(方法)

b1. DELETE FROM USER WHERE USER='usera';

b2. drop user usera@localhost;
(5.0.1版本以前只能 drop 沒有任何權限的 user ,所以須先執行上述 [A.移除權限] 之步驟)
(若版本 >= 5.0.1 ,則建議採用下述的方法3較快)



2.直接刪除 (較麻煩,需逐一刪除 user,db,user_info,tables_priv,procs_priv,columns_priv
表中的資料與權限設定)

delete from user where user='usera';
...
...
delete from columns_priv where user='usera';



3."一步"即搞定刪除一個帳戶之所有工作(需要在5.0.1及以上版本)
drop user usera@localhost;

回覆


類似的主題
主題 主題作者 討論版 回覆 最後發表
關於win2003 FTP 權限問題 tenz9596 -- Windows 討 論 版 4 2009-04-13 03:52 PM
【問題】QuiXplorer.v2.3.1 權限問題 ericshn ☉ -- 架 站 DIY 討 論 版 14 2007-03-01 11:28 PM
請問使用yum 安裝apache2, php, mysql, php-mysql 的問題. cpthk -- FreeBSD & Linux 討 論 版 3 2005-09-23 12:29 AM
明明就有寫到資料庫(mysql) 但是資料庫(mysql)裡面就是沒資料 怎麼辦呢...?? Ezond ☉ -- 架 站 DIY 討 論 版 4 2005-02-22 05:03 PM
【教學】Instalation HOWTO for postfix with MySQL / complete virtual user repsol -- FreeBSD & Linux 討 論 版 0 2002-05-27 11:27 AM






 XML   RSS 2.0   RSS 
本站使用 vBulletin 合法版權程式
站務信箱 : [email protected]

本論壇所有文章僅代表留言者個人意見,並不代表本站之立場,討論區以「即時留言」方式運作,故無法完全監察所有即時留言,若您發現文章可能有異議,請 email :[email protected] 處理。