MySQL用户与权限管理
執行mysql select 查詢報錯:
SELECT command denied to user 'root'@'localhost' for table "xxx"
問題原因:
權限不足,
解決方法:
還是數據庫權限的問題,不知道為啥賦給了所有權限后還是有各種權限問題,看來有空得整理一下mysql所有相關權限的問題了...
下面才是解決這個select權限的方法:
?
========對于ROOT用戶的密碼操作(更改用戶密碼)========
剛剛安裝完的Mysql,只一有個root用戶,密碼為空,而且只能在本機登錄!
為root加上密碼xxx123:
./bin/mysqladmin -u root password xxx123
或寫成
./bin/mysqladmin -uroot password xxx123
加下密碼之后,在本進行進入mysql:
./bin/mysql -uroot -p
更改root的密碼由xxx123改為yy1234:
./bin/mysqladmin -uroot -pxxx123 password yy1234
?
=======grant 權限 on 數據庫對象 to 用戶==========
MySQL 賦予用戶權限命令的簡單格式可概括為:
grant 權限 on 數據庫對象 to 用戶
grant 權限 on 數據庫對象 to 用戶 identified by "密碼"
========用戶及權限管理:最常用操作實例========
(用戶名:dba1,密碼:dbapasswd,登錄IP:192.168.0.10)
//開放管理MySQL中所有數據庫的權限
grant all on *.* to dba1@'192.168.0.10'identified by "dbapasswd";
//開放管理MySQL中具體數據庫(testdb)的權限
grant all privileges on testdb to dba1@'192.168.0.10'identified by "dbapasswd";
或
grant all on testdb to dba1@'192.168.0.10'identified by "dbapasswd";
//開放管理MySQL中具體數據庫的表(testdb.table1)的權限
grant all on testdb.teable1 to dba1@'192.168.0.10'identified by "dbapasswd";
//開放管理MySQL中具體數據庫的表(testdb.table1)的部分列的權限
grant select(id, se, rank) on testdb.table1 to ba1@'192.168.0.10'identified by "dbapasswd";
//開放管理操作指令
grant select, insert, update, delete on testdb.* to dba1@'192.168.0.10'identified by "dbapasswd";
//回收權限
revoke all on *.* from dba1@localhost;
//查看 MySQL 用戶權限
show grants;
show grants for dba1@localhost;
========用戶及權限管理:更多更詳細實例========
下面用實例來進行說明:
?
一、grant普通數據用戶(test1),查詢、插入、更新、刪除 數據庫(test)中所有表數據的權利。
grant select on test.* to test1@'%';
grant insert on test.* to test1@'%';
grant update on test.* to test1@'%';
grant delete on test.* to test1@'%';
或者,用一條 MySQL 命令來替代:
grant select, insert, update, delete on test.* to test1@'%';
二、grant數據庫開發人員(duser),創建表、索引、視圖、存儲過程、函數。。。等權限。
?
grant創建、修改、刪除 MySQL 數據表結構權限。
grant create on testdb.* to duser@'192.168.0.%';
grant alter on testdb.* to duser@'192.168.0.%';
grant drop ? on testdb.* to duser@'192.168.0.%';
grant 操作 MySQL 外鍵權限。
grant references on testdb.* to developer@'192.168.0.%';
grant 操作 MySQL 臨時表權限。
grant create temporary tables on testdb.* to developer@'192.168.0.%';
grant 操作 MySQL 索引權限。
grant index on testdb.* to developer@'192.168.0.%';
grant 操作 MySQL 視圖、查看視圖源代碼 權限。
grant create view on testdb.* to duser@'192.168.0.%';
grant show ? view on testdb.* to duser@'192.168.0.%';
grant 操作 MySQL 存儲過程、函數 權限。
grant create routine on testdb.* to duser@'192.168.0.%';
grant alter routine on testdb.* to duser@'192.168.0.%';
grant execute ? ? ? ?on testdb.* to duser@'192.168.0.%';
三、grant 普通DBA管理某個MySQL數據庫(test)的權限。
grant all privileges on test to dba@'localhost'
其中,關鍵字 “privileges” 可以省略。
四、grant 高級 DBA 管理 MySQL 中所有數據庫的權限。
grant all on *.* to dba@'localhost'
五、MySQL grant 權限,分別可以作用在多個層次上。
?
1. grant 作用在整個 MySQL 服務器上:
grant select on *.* to dba@localhost; -- dba 可以查詢 MySQL 中所有數據庫中的表。
grant all ? ?on *.* to dba@localhost; -- dba 可以管理 MySQL 中的所有數據庫
2. grant 作用在單個數據庫上:
grant select on testdb.* to dba@localhost; -- dba 可以查詢 testdb 中的表。
3. grant 作用在單個數據表上:
grant select, insert, update, delete on testdb.orders to dba@localhost;
4. grant 作用在表中的列上:
grant select(id, se, rank) on testdb.apache_log to dba@localhost;
5. grant 作用在存儲過程、函數上:
grant execute on procedure testdb.pr_add to 'dba'@'localhost'
grant execute on function testdb.fn_add to 'dba'@'localhost'
六、查看 MySQL 用戶權限
查看當前用戶(自己)權限:
show grants;
查看其他 MySQL 用戶權限:
show grants for dba@localhost;
七、撤銷已經賦予給 MySQL 用戶權限的權限。
revoke 跟 grant 的語法差不多,只需要把關鍵字 “to” 換成 “from” 即可:
grant all on *.* to ?dba@localhost;
revoke all on *.* from dba@localhost;
八、MySQL grant、revoke 用戶權限注意事項
1. grant, revoke 用戶權限后,該用戶只有重新連接 MySQL 數據庫,權限才能生效。
2. 如果想讓授權的用戶,也可以將這些權限 grant 給其他用戶,需要選項 “grant option“
grant select on testdb.* to dba@localhost with grant option;
這個特性一般用不到。實際中,數據庫權限最好由 DBA 來統一管理。
補充:
可以用 CREATE USER 或 GRANT 創建用戶,后者還同時分配相關權限。而 REVOKE 則用于刪除用戶權限,DROP USER 刪除賬戶。
$?mysql?-u?root?-p password:mysql>?create?database?test;?#?創建數據庫 Query?OK,?1?row?affected?(0.00?sec)mysql>?show?databases;?#?查看數據庫是否創建成功 +--------------------+ |?Database???????????| +--------------------+ |?information_schema?| |?mysql??????????????| |?test???????????????| +--------------------+ 3?rows?in?set?(0.00?sec)mysql>?grant?all?on?test.*?to?user1@'%'?identified?by?'123456'?with?grant?option;?#?創建特權管理用戶 Query?OK,?0?rows?affected?(0.00?sec)mysql>?select?user,host?from?mysql.user;?#?查看用戶創建是否成功 +------------------+-----------+ |?user?????????????|?host??????| +------------------+-----------+ |?user1????????????|?%?????????| |?root?????????????|?127.0.0.1?| |?debian-sys-maint?|?localhost?| |?root?????????????|?localhost?| |?root?????????????|?server????| +------------------+-----------+ 5?rows?in?set?(0.00?sec)mysql>?show?grants?for?user1;?#?查看用戶權限 +--------------------------------------------------------------------------------------------------+ |?Grants?for?user1@%???????????????????????????????????????????????????????????????????????????????| +--------------------------------------------------------------------------------------------------+ |?GRANT?USAGE?ON?*.*?TO?'user1'@'%'?IDENTIFIED?BY?PASSWORD?'*6BB...2CA2AD9'????????????????????????| |?GRANT?ALL?PRIVILEGES?ON?`test`.*?TO?'user1'@'%'?WITH?GRANT?OPTION????????????????????????????????| +--------------------------------------------------------------------------------------------------+ 2?rows?in?set?(0.00?sec)
GRANT 語法:
權限列表:
-
ALTER: 修改表和索引。
-
CREATE: 創建數據庫和表。
-
DELETE: 刪除表中已有的記錄。
-
DROP: 拋棄(刪除)數據庫和表。
-
INDEX: 創建或拋棄索引。
-
INSERT: 向表中插入新行。
-
REFERENCE: 未用。
-
SELECT: 檢索表中的記錄。
-
UPDATE: 修改現存表記錄。
-
FILE: 讀或寫服務器上的文件。
-
PROCESS: 查看服務器中執行的線程信息或殺死線程。
-
RELOAD: 重載授權表或清空日志、主機緩存或表緩存。
-
SHUTDOWN: 關閉服務器。
-
ALL: 所有權限,ALL PRIVILEGES同義詞。
-
USAGE: 特殊的 "無權限" 權限。
用戶賬戶包括 "username" 和 "host" 兩部分,后者表示該用戶被允許從何地接入。user1@'%' 表示任何地址,默認可以省略。還可以是 "user1@192.168.1.%"、"user1@%.abc.com" 等。數據庫格式為 db@table,可以是 "test.*" 或 "*.*",前者表示 test 數據庫的所有表,后者表示所有數據庫的所有表。
子句 "WITH GRANT OPTION" 表示該用戶可以為其他用戶分配權限。
我們用 root 再創建幾個用戶,然后由 test 數據庫的管理員 user1 為他們分配權限。
好了,我們退出改用 user1 登錄并針對 test 數據庫進行操作。
繼續,創建一個數據表。
接下來我們為 user2, user3 分配權限。
好了,我們退出,切換成 user2 操作看看。
進行操作測試。
我們切換回 user1 管理賬戶,移除 user2 的 UPDATE 權限看看。
再次切換回 user2。
好了,到此我們基本完成了創建用戶和分配權限的操作。接下來,我們回到 root 進行修改用戶密碼和刪除用戶操作。
用戶 user2 無法再次使用。
試試 user3。
要修改自己的密碼直接執行 "set password = password('new_password');" 即可。
------- 摘要 --------------------------------------
創建用戶:
分配權限:
查看權限:
修改密碼:
移除權限:
刪除用戶:
數據庫列表:
數據表列表:
當前數據庫:
當前用戶:
數據表結構:
刷新權限:
?
總結
以上是生活随笔為你收集整理的MySQL用户与权限管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 附5、MDT 2013 Update 1
- 下一篇: mysql中的order by