mysql用戶的一些權限

mysql數據庫裏有3個權限表(在mysql庫裏):user,db,host
權限表的存儲過程:
1.先從user表中的host,user,password這三個字段中判斷連接的ip,用戶名,密碼是否存在表中,存在則通過身份驗證
2.通過權限驗證,進行權限分配時,按照user,db,tables_priv,columns_priv的順序分配,即先檢查全局權限表user,如果user中對應的權限爲Y,則此用戶對所有數據庫的權限都爲Y,將不再檢查db,talbes_priv,columns_priv;如果爲N,則到db表中檢查此用戶對應的具體數據庫,並得到db中爲Y的權限;如果db中爲N,則檢查tables_priv中此數據庫對應的具體表,取得表中的權限Y,以此類推。

mysql的權限說明:

1.usage
該權限只能用於數據庫的登錄,不能執行任何操作,且普usage權限不能被回收,即REVOKE用戶不能刪除用戶

mysql> grant usage on *.* to ‘p1′@’localhost’ identified by123′;

2.select
必須有select的權限,纔可以使用select table
3.create
必須有create的權限,纔可以使用create table
4. create routine
必須具有create routine的權限,纔可以使用{create |alter|drop} {procedure|function}
5. create temporary tables(注意這裏是tables,不是table)
必須有create temporary tables的權限,纔可以使用create temporary tables.
6. create view
必須有create view的權限,纔可以使用create view
7. create user
要使用CREATE USER,必須擁有mysql數據庫的全局CREATE USER權限,或擁有INSERT權限。
8. insert
必須有insert的權限,纔可以使用insert into ….. values….
9. alter
必須有alter的權限,纔可以使用alter table
10. alter routine
必須具有alter routine的權限,纔可以使用{alter |drop} {procedure|function}
11. update
必須有update的權限,纔可以使用update table
12. delete
必須有delete的權限,纔可以使用delete from ….where….(刪除表中的記錄)
13. drop
必須有drop的權限,纔可以使用drop database db_name; drop table tab_name;
14. show database
通過show database只能看到你擁有的某些權限的數據庫,除非你擁有全局SHOW DATABASES權限。
15. show view
必須擁有show view權限,才能執行show create view。
16. index
必須擁有index權限,才能執行[create |drop] index
17. excute
執行存在的Functions,Procedures
18. lock tables
必須擁有lock tables權限,纔可以使用lock tables
19. references
有了REFERENCES權限,用戶就可以將其它表的一個字段作爲某一個表的外鍵約束。
20. reload
必須擁有reload權限,纔可以執行flush [tables | logs | privileges]

mysql> grant reload on pyt.* to p1@localhost;

ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES

mysql> grant reload on *.* to ‘p1′@’localhost’;

Query OK, 0 rows affected (0.00 sec)

mysql> flush tables;

21. replication client
擁有此權限可以查詢master server、slave server狀態。

mysql> show master status;

ERROR 1227 (42000): Access denied; you need the SUPER,REPLICATION CLIENT privilege for this operation

mysql> grant Replication client on *.* to p1@localhost;

或:mysql> grant super on *.* to p1@localhost;

mysql> show master status;

+——————+———-+————–+——————+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+——————+———-+————–+——————+

| mysql-bin.000006 | 2111 | | |

+——————+———-+————–+——————+

mysql> show slave status;

22. replication slave
擁有此權限可以查看從服務器,從主服務器讀取二進制日誌。

mysql> show slave hosts;

ERROR 1227 (42000): Access denied; you need the REPLICATION SLAVE privilege for this operation

mysql> show binlog events;

ERROR 1227 (42000): Access denied; you need the REPLICATION SLAVE privilege for this operation

mysql> grant replication slave on *.* to p1@localhost;

mysql> show slave hosts;

Empty set (0.00 sec)

mysql>show binlog events;

+—————+——-+—————-+———–+————-+————–+

| Log_name | Pos | Event_type | Server_id| End_log_pos|Info | +—————+——-+————–+———–+————-+—————+

| mysql-bin.000005 | 4 | Format_desc | 1 | 98 | Server ver: 5.0.77-log, Binlog ver: 4 | |mysql-bin.000005|98|Query|1|197|use `mysql`; create table a1(i int)engine=myisam|

……………………………………

23. Shutdown
關閉MySQL:

#沒有shutdown權限時,會報錯
[root@192-168-8-128 ~]# mysqladmin -utest -p'123456' shutdown 
mysqladmin: shutdown failed; error: 'Access denied; you need (at least one of) the SHUTDOWN privilege(s) for this operation'
#添加shutdown權限
mysql>GRANT shutdown ON *.* TO 'test'@'localhost' IDENTIFIED BY '123456';
#再次執行,不報錯,關閉mysql成功
[root@192-168-8-128 ~]# mysqladmin -utest -p -S /home/mysql/mysql.sock shutdown
Enter password: 
[root@192-168-8-128 ~]#

24. grant option
擁有grant option,就可以將自己擁有的權限授予其他用戶(僅限於自己已經擁有的權限)
25. file
擁有file權限纔可以執行 select ..into outfile和load data infile…操作,但是不要把file, process, super權限授予管理員以外的賬號,這樣存在嚴重的安全隱患。
26. super
這個權限允許用戶終止任何查詢;修改全局變量的SET語句;使用CHANGE MASTER,PURGE MASTER LOGS。
27. process
通過這個權限,用戶可以執行SHOW PROCESSLIST和KILL命令。默認情況下,每個用戶都可以執行SHOW PROCESSLIST命令,但是隻能查詢本用戶的進程。
另外
管理權限(如 super, process, file等)不能夠指定某個數據庫,on後面必須跟.

mysql> grant super on pyt.* to p1@localhost;
ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
mysql> grant super on *.* to p1@localhost;
Query OK, 0 rows affected (0.01 sec)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章