MySQL之权限管理

来源:互联网 发布:社交数据的特点 编辑:程序博客网 时间:2024/05/13 18:16

select * from mysql.user where user='root'; 查询出好几条数据

user     host         password            
---- --------- --------------------
root   localhost    *1D2E3F4G5H6I7J819M 
root   sv01            *1D2E3F4G5H6I7J819M 
root  127.0.0.1    *1D2E3F4G5H6I7J819M 
root   ::1                *1D2E3F4G5H6I7J819M 
root   %                 *1D2E3F4G5H6I7J819M 


describe mysql.user; 可以看到键是user和host两个字段 PRIMARY KEY (`Host`,`User`),相当于user表的用户由user和host两个字段决定的。

(root,%),表示可以远程登录,并且是除服务器外的其他任何终端

(root,localhost),表示可以本地登录,即可以在服务器上登陆

(root,127.0.0.1 ),表示可以本机登陆,即可以在服务器上登陆

(root,sv01),表示主机名为sv1可以登陆,sv01具体指的哪台机器,可以在cat /etc/hosts查看

(root,::1)   ,表示本机可以登陆, 看密码都是相同嘛,具体::1代表意义,待查



localhost和127.0.0.1相关知识:

1、localhost,local,本地的意思,也是主机名,要按代表IP地址的话,就是127.0.0.1。通过解析本机的/etc/hosts文件把localhost解析为127.0.0.1

2、127.0.0.1,是本地地址,自己机器的IP地址,不管自己的机器是否联网了,都是这个IP地址。这个IP地址也是保留的,不会再分配的。

3、本机IP,和127.0.0.1也有点区别,比如机器A的IP地址是10.1.192.160,机器B通过10.1.192.160可以访问到A机器,但是127.0.0.1就只能代表A自己,如果B访问127.0.0.1,就是访问的B机器自己本身。

一家之言,仅代表个人观点,若有不正确,请指正~


查看mysql用户的权限:show grants for username;

GRANT USAGE ON *.* TO 'qa'@'%' IDENTIFIED BY PASSWORD '*871CF67A65086024AA8534B94CE65259EF8B5501'
GRANT ALL PRIVILEGES ON `online%`.* TO 'qa'@'%'
GRANT ALL PRIVILEGES ON `test%`.* TO 'qa'@'%'
GRANT ALL PRIVILEGES ON `test_`.* TO 'qa'@'%'



mysql.user表中Host为%的含义

  Host列指定了允许用户登录所使用的IP,比如user=root Host=192.168.1.1。这里的意思就是说root用户只能通过192.168.1.1的客户端去访问。  而%是个通配符,如果Host=192.168.1.%,那么就表示只要是IP地址前缀为“192.168.1.”的客户端都可以连接。如果Host=%,表示所有IP都有连接权限。、  这也就是为什么在开启远程连接的时候,大部分人都直接把Host改成%的缘故,为了省事。


1:新增用户:

注:MySQL数据库下user表中,Host和User为两个主键列(primary key),已经各版本下非空未设置默认字段。

登录后,切换db:

[sql] view plain copy
  1. mysql> use mysql;  
  2. Reading table information for completion of table and column names  
  3. You can turn off this feature to get a quicker startup with -A  
  4.   
  5. Database changed  

新增用户:

注:限制kaka用户的登陆ip为10.155.123.55,ip为随手写入,如果正确配置为您有效登陆ip,所有ip登陆,则设置Host为 '%'

[sql] view plain copy
  1. mysql> INSERT INTO mysql.user(Host,User,PasswordVALUES("10.155.123.55","kaka",PASSWORD("kaka123"));  

在版本 5.6.27:

[sql] view plain copy
  1. mysql> INSERT INTO mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_subject) VALUES("10.155.123.55","kaka",PASSWORD("kaka123"),"","","");  
  2. Query OK, 1 row affected (0.03 sec)  

新增用户(全sql):

[sql] view plain copy
  1. INSERT  INTO `user`(`Host`,`User`,`Password`,`Select_priv`,`Insert_priv`,`Update_priv`,`Delete_priv`,`Create_priv`,`Drop_priv`,`Reload_priv`,`Shutdown_priv`,`Process_priv`,`File_priv`,`Grant_priv`,`References_priv`,`Index_priv`,`Alter_priv`,`Show_db_priv`,`Super_priv`,`Create_tmp_table_priv`,`Lock_tables_priv`,`Execute_priv`,`Repl_slave_priv`,`Repl_client_priv`,`Create_view_priv`,`Show_view_priv`,`Create_routine_priv`,`Alter_routine_priv`,`Create_user_priv`,`Event_priv`,`Trigger_priv`,`Create_tablespace_priv`,`ssl_type`,`ssl_cipher`,`x509_issuer`,`x509_subject`,`max_questions`,`max_updates`,`max_connections`,`max_user_connections`,`plugin`,`authentication_string`,`password_expired`) VALUES ('%','root','*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'mysql_native_password','','N');  

新增用户完成,刷新mysql的系统权限相关表

[sql] view plain copy
  1. mysql> flush privileges;  
  2. Query OK, 0 rows affected (0.00 sec)  

设置遇到问题,请查看:MySQL配置和设置问题小结

重启生效:

[sql] view plain copy
  1. [root@Tony_ts_tian bin]# service mysqld restart  
  2. Shutting down MySQL.... SUCCESS!   
  3. Starting MySQL. SUCCESS!   
查询用户,Host,User,Password:

[sql] view plain copy
  1. mysql>  SELECT Host,User,Password FROM mysql.user;    
  2. +----------------+------+-------------------------------------------+  
  3. | Host           | User | Password                                  |  
  4. +----------------+------+-------------------------------------------+  
  5. | localhost      | root | *71ABCA8B06D46066CEF8062A75256E66243D0FC8 |  
  6. | tony\_ts\_tian | root | *71ABCA8B06D46066CEF8062A75256E66243D0FC8 |  
  7. | 127.0.0.1      | root | *71ABCA8B06D46066CEF8062A75256E66243D0FC8 |  
  8. | ::1            | root | *71ABCA8B06D46066CEF8062A75256E66243D0FC8 |  
  9. | 10.155.123.55  | kaka | *90B3D884FB6092549F244125549B77C000A0F9C6 |  
  10. | %              | root | *71ABCA8B06D46066CEF8062A75256E66243D0FC8 |  
  11. +----------------+------+-------------------------------------------+  
  12. rows in set (0.00 sec)  

2:修改信息,密码,类似可修改其他字段。

[sql] view plain copy
  1. mysql> UPDATE `userSET Password=PASSWORD("123456"WHERE Host='10.155.123.55' AND User='kaka';  
  2. Query OK, 1 row affected (0.02 sec)  
  3. Rows matched: 1  Changed: 1  Warnings: 0  
  4. mysql> flush privileges;  
  5. Query OK, 0 rows affected (0.00 sec)  
  6. mysql> SELECT Host,User,Password FROM `user`;  
  7. 前:  
  8. | 10.155.123.55  | kaka | *90B3D884FB6092549F244125549B77C000A0F9C6 |  
  9. 后:  
  10. | 10.155.123.55  | kaka | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |  

3:删除用户:

[sql] view plain copy
  1. mysql> DELETE FROM `userWHERE Host='10.155.123.55' AND User='kaka';  
  2. Query OK, 1 row affected (0.00 sec)  
  3.   
  4. mysql> flush privileges;  
  5. Query OK, 0 rows affected (0.00 sec)  
  6.   
  7. mysql> SELECT Host,User,Password FROM `user`;  
  8. +----------------+------+-------------------------------------------+  
  9. | Host           | User | Password                                  |  
  10. +----------------+------+-------------------------------------------+  
  11. | localhost      | root | *71ABCA8B06D46066CEF8062A75256E66243D0FC8 |  
  12. | tony\_ts\_tian | root | *71ABCA8B06D46066CEF8062A75256E66243D0FC8 |  
  13. | 127.0.0.1      | root | *71ABCA8B06D46066CEF8062A75256E66243D0FC8 |  
  14. | ::1            | root | *71ABCA8B06D46066CEF8062A75256E66243D0FC8 |  
  15. | %              | root | *71ABCA8B06D46066CEF8062A75256E66243D0FC8 |  
  16. +----------------+------+-------------------------------------------+  
  17. rows in set (0.00 sec)  

4. 权限分配

[plain] view plain copy
  1. GRANT语法:     
  2.    GRANT 权限 ON 数据库.* TO 用户名@'登录主机' IDENTIFIED BY '密码'  
  3. 权限:  
  4.    ALL,ALTER,CREATE,DROP,SELECT,UPDATE,DELETE  
  5.    新增用户:权限为USAGE,即为:"无权限",想要创建一个没有权限的用户时,可以指定USAGE  
  6. 数据库:  
  7.      *.*              表示所有库的所有表  
  8.      mylove.*         表示mylove库的所有表  
  9.      mylove.loves     表示mylove库的loves表   
  10. 用户名:  
  11.      MySQL的账户名  
  12. 登陆主机:  
  13.      允许登陆到MySQL Server的客户端ip  
  14.      '%'表示所有ip  
  15.      'localhost' 表示本机  
  16.      '10.155.123.55' 特定IP  
  17. 密码:  
  18.       MySQL的账户名对应的登陆密码  

注: IDENTIFIED BY '密码',可选。

        GRANT会覆盖用户的部分信息,跟insert 、update执行功能一样。

给用户kaka分配test数据库下user表的查询select权限:

[sql] view plain copy
  1. mysql> GRANT SELECT ON test.user TO kaka@'10.155.123.55' IDENTIFIED BY '123456';  
  2. Query OK, 0 rows affected (0.00 sec)  
  3. mysql> flush privileges;  
  4. Query OK, 0 rows affected (0.00 sec)  
  5. mysql> show Grants for 'kaka'@'10.155.123.55';  
  6. +-----------------------------------------------------------------------------------------------------------------+  
  7. | Grants for kaka@10.155.123.55                                                                                   |  
  8. +-----------------------------------------------------------------------------------------------------------------+  
  9. GRANT USAGE ON *.* TO 'kaka'@'10.155.123.55' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |  
  10. GRANT SELECT ON `test`.`userTO 'kaka'@'10.155.123.55'                                                         |  
  11. +-----------------------------------------------------------------------------------------------------------------+  
  12. rows in set (0.00 sec)  

为了快速测试,我要把ip切回%,ip全访问:

使用和测试:

数据库和数据表请看: MySQL数据定义语句:CREATE(创建)命令、ALTER(修改)命令、DROP(删除)

[sql] view plain copy
  1. mysql> use mysql  
  2. Reading table information for completion of table and column names  
  3. You can turn off this feature to get a quicker startup with -A  
  4. Database changed  
  5. 修改权限Host为所有ip登陆:  
  6. mysql> UPDATE `userSET Host='%' WHERE Host='10.155.123.55' AND User='kaka';  
  7. Query OK, 1 row affected (0.00 sec)  
  8. Rows matched: 1  Changed: 1  Warnings: 0  
  9. 查看kaka的权限:  
  10. mysql> show grants for 'kaka'@'10.155.123.55';  
  11. +-----------------------------------------------------------------------------------------------------------------+  
  12. | Grants for kaka@10.155.123.55                                                                                   |  
  13. +-----------------------------------------------------------------------------------------------------------------+  
  14. GRANT USAGE ON *.* TO 'kaka'@'10.155.123.55' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |  
  15. GRANT SELECT ON `test`.`userTO 'kaka'@'10.155.123.55'                                                         |  
  16. +-----------------------------------------------------------------------------------------------------------------+  
  17. rows in set (0.00 sec)  
  18. 刷新MySQL的系统权限相关表  
  19. mysql> flush privileges;  
  20. Query OK, 0 rows affected (0.00 sec)  
  21. 查看kaka的权限:  
  22. mysql> show grants for 'kaka'@'%';  
  23. +-----------------------------------------------------------------------------------------------------+  
  24. | Grants for kaka@%                                                                                   |  
  25. +-----------------------------------------------------------------------------------------------------+  
  26. GRANT USAGE ON *.* TO 'kaka'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |  
  27. +-----------------------------------------------------------------------------------------------------+  
  28. 1 row in set (0.00 sec)  
  29. 给用户kaka分配weloveshare数据库下user表的查询select权限:  
  30. mysql> GRANT SELECT ON `weloveshare`.`userTO kaka@'%';  
  31. Query OK, 0 rows affected (0.00 sec)  
  32. 查看kaka的权限:  
  33. mysql> show grants for 'kaka'@'%';  
  34. +-----------------------------------------------------------------------------------------------------+  
  35. | Grants for kaka@%                                                                                   |  
  36. +-----------------------------------------------------------------------------------------------------+  
  37. GRANT USAGE ON *.* TO 'kaka'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |  
  38. GRANT SELECT ON `weloveshare`.`userTO 'kaka'@'%'                                                  |  
  39. +-----------------------------------------------------------------------------------------------------+  
  40. rows in set (0.00 sec)  
  41. 查看weloveshare数据库下user表的数据:  
  42. mysql> use weloveshare  
  43. Reading table information for completion of table and column names  
  44. You can turn off this feature to get a quicker startup with -A  
  45. Database changed  
  46. mysql> select * from user;  
  47. Empty set (0.00 sec)  
  48. 退出当前用户:  
  49. mysql> exit;  
  50. Bye  
  51. 切换用户kaka:  
  52. [root@Tony_ts_tian ~]# mysql -u kaka -p  
  53. Enter password:   
  54. 登录成功。  
  55. 切换数据库,查看user表数据:  
  56. mysql> use weloveshare  
  57. Reading table information for completion of table and column names  
  58. You can turn off this feature to get a quicker startup with -A  
  59.   
  60. Database changed  
  61. mysql> select * from user;  
  62. Empty set (0.00 sec)  
  63. 插入数据:  
  64. mysql> INSERT INTO `weloveshare`.`user`(uname,upass,ustatus) VALUES('kaka','kaka123','0');  
  65. ERROR 1142 (42000): INSERT command denied to user 'kaka'@'localhost' for table 'user'  
  66. 提示:INSERT被拒绝。配置成功。  

[sql] view plain copy
  1. 注:`weloveshare`.`user`数据库名.数据表名,kaka用户名,%为Host,ip可限制或不 localhost,%,192.168.10.%  
  2. grant创建、修改、删除、更新、查询MySQL数据表结构权限:  
  3. GRANT CREATE ON `weloveshare`.`userTO kaka@'%';   
  4. GRANT ALTER ON `weloveshare`.`userTO kaka@'%';   
  5. GRANT DROP ON `weloveshare`.`userTO kaka@'%';   
  6. GRANT UPDATE ON `weloveshare`.`userTO kaka@'%';   
  7. GRANT SELECT ON `weloveshare`.`userTO kaka@'%';   
  8. grant操作MySQL外键权限:  
  9. GRANT REFERENCES ON `weloveshare`.`userTO kaka@'%';   
  10. grant操作MySQL 临时表权限:  
  11. GRANT CREATE TEMPORARY TABLES ON `weloveshare`.`userTO kaka@'%';   
  12. grant操作MySQL索引权限  
  13. GRANT INDEX ON `weloveshare`.`userTO kaka@'%';   
  14. grant操作MySQL视图、查看视图源代码权限:  
  15. GRANT CREATE VIEW ON `weloveshare`.`userTO kaka@'%';   
  16. GRANT SHOW VIEW ON `weloveshare`.`userTO kaka@'%';   
  17. grant操作MySQL存储过程(查看状态,删除修改)、函数权限。  
  18. GRANT CREATE ROUTINE ON `weloveshare`.`userTO kaka@'%';   
  19. GRANT CREATE ROUTINE ON `weloveshare`.`userTO kaka@'%';   
  20. GRANT EXECUTE ON `weloveshare`.`userTO kaka@'%';  

注:其他的详细权限,请查看,备注附件(最后)。

5:查看数据库登陆所有用户:

[sql] view plain copy
  1. mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';'AS QUERY FROM mysql.user;  
  2. +--------------------------------+  
  3. | QUERY                          |  
  4. +--------------------------------+  
  5. User'kaka'@'%';              |  
  6. User'root'@'%';              |  
  7. User'root'@'127.0.0.1';      |  
  8. User'root'@'::1';            |  
  9. User'root'@'localhost';      |  
  10. User'root'@'tony\_ts\_tian'; |  
  11. +--------------------------------+  
  12. rows in set (0.00 sec)  

查看某个用户的具体权限,比如root:

[sql] view plain copy
  1. mysql> show grants for 'root'@'%';  
  2. +--------------------------------------------------------------------------------------------------------------------------------+  
  3. | Grants for root@%                                                                                                              |  
  4. +--------------------------------------------------------------------------------------------------------------------------------+  
  5. GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD '*71ABCA8B06D46066CEF8062A75256E66243D0FC8' WITH GRANT OPTION |  
  6. +--------------------------------------------------------------------------------------------------------------------------------+  
  7. 1 row in set (0.00 sec)  

[sql] view plain copy
  1. mysql> select * from mysql.user where user='root' \G  
注:\G为按列显示数据。

备注附件:

查看MySQL数据中user表的表结构:

[sql] view plain copy
  1. mysql> DESC mysql.user;  
  2. +------------------------+-------------------+------+-----+-----------+-------+  
  3. | Field                  | Type              | Null | Key | Default   | Extra |  
  4. +------------------------+-------------------+------+-----+-----------+-------+  
  5. | Host                   | char(60)          | NO   | PRI |           |       |  
  6. User                   | char(16)          | NO   | PRI |           |       |  
  7. Password               | char(41)          | NO   |     |           |       |  
  8. | Select_priv            | enum('N','Y')     | NO   |     | N         |       |  
  9. | Insert_priv            | enum('N','Y')     | NO   |     | N         |       |  
  10. | Update_priv            | enum('N','Y')     | NO   |     | N         |       |  
  11. | Delete_priv            | enum('N','Y')     | NO   |     | N         |       |  
  12. | Create_priv            | enum('N','Y')     | NO   |     | N         |       |  
  13. | Drop_priv              | enum('N','Y')     | NO   |     | N         |       |  
  14. | Reload_priv            | enum('N','Y')     | NO   |     | N         |       |  
  15. | Shutdown_priv          | enum('N','Y')     | NO   |     | N         |       |  
  16. | Process_priv           | enum('N','Y')     | NO   |     | N         |       |  
  17. | File_priv              | enum('N','Y')     | NO   |     | N         |       |  
  18. | Grant_priv             | enum('N','Y')     | NO   |     | N         |       |  
  19. | References_priv        | enum('N','Y')     | NO   |     | N         |       |  
  20. | Index_priv             | enum('N','Y')     | NO   |     | N         |       |  
  21. | Alter_priv             | enum('N','Y')     | NO   |     | N         |       |  
  22. | Show_db_priv           | enum('N','Y')     | NO   |     | N         |       |  
  23. | Super_priv             | enum('N','Y')     | NO   |     | N         |       |  
  24. | Create_tmp_table_priv  | enum('N','Y')     | NO   |     | N         |       |  
  25. | Lock_tables_priv       | enum('N','Y')     | NO   |     | N         |       |  
  26. | Execute_priv           | enum('N','Y')     | NO   |     | N         |       |  
  27. | Repl_slave_priv        | enum('N','Y')     | NO   |     | N         |       |  
  28. | Repl_client_priv       | enum('N','Y')     | NO   |     | N         |       |  
  29. | Create_view_priv       | enum('N','Y')     | NO   |     | N         |       |  
  30. | Show_view_priv         | enum('N','Y')     | NO   |     | N         |       |  
  31. | Create_routine_priv    | enum('N','Y')     | NO   |     | N         |       |  
  32. | Alter_routine_priv     | enum('N','Y')     | NO   |     | N         |       |  
  33. | Create_user_priv       | enum('N','Y')     | NO   |     | N         |       |  
  34. | Event_priv             | enum('N','Y')     | NO   |     | N         |       |  
  35. | Trigger_priv           | enum('N','Y')     | NO   |     | N         |       |  
  36. | Create_tablespace_priv | enum('N','Y')     | NO   |     | N         |       |  
  37. | ssl_type               | enum('','ANY','X509','SPECIFIED') | NO  || |       |  
  38. | ssl_cipher             | blob              | NO   |     | NULL      |       |  
  39. | x509_issuer            | blob              | NO   |     | NULL      |       |  
  40. | x509_subject           | blob              | NO   |     | NULL      |       |  
  41. | max_questions          | int(11) unsigned  | NO   |     | 0         |       |  
  42. | max_updates            | int(11) unsigned  | NO   |     | 0         |       |  
  43. | max_connections        | int(11) unsigned  | NO   |     | 0         |       |  
  44. | max_user_connections   | int(11) unsigned  | NO   |     | 0         |       |  
  45. | plugin                 | char(64)          | YES  || mysql_native_password ||  
  46. | authentication_string  | text              | YES  |     | NULL      |       |  
  47. | password_expired       | enum('N','Y')     | NO   |     | N         |       |  
  48. +------------------------+-------------------+------+-----+-----------+-------+  
  49. 43 rows in set (0.00 sec)  

查看root用户的所有具体权限:

[sql] view plain copy
  1.                Host: %  
  2.                User: root  
  3.            Password: *71ABCA8B06D46066CEF8062A75256E66243D0FC8  
  4.         Select_priv: Y  
  5.         Insert_priv: Y  
  6.         Update_priv: Y  
  7.         Delete_priv: Y  
  8.         Create_priv: Y  
  9.           Drop_priv: Y  
  10.         Reload_priv: Y  
  11.       Shutdown_priv: Y  
  12.        Process_priv: Y  
  13.           File_priv: Y  
  14.          Grant_priv: Y  
  15.     References_priv: Y  
  16.          Index_priv: Y  
  17.          Alter_priv: Y  
  18.        Show_db_priv: Y  
  19.          Super_priv: Y  
  20. eate_tmp_table_priv: Y  
  21.    Lock_tables_priv: Y  
  22.        Execute_priv: Y  
  23.     Repl_slave_priv: Y  
  24.    Repl_client_priv: Y  
  25.    Create_view_priv: Y  
  26.      Show_view_priv: Y  
  27. Create_routine_priv: Y  
  28.  Alter_routine_priv: Y  
  29.    Create_user_priv: Y  
  30.          Event_priv: Y  
  31.        Trigger_priv: Y  
  32. ate_tablespace_priv: Y  
  33.            ssl_type:   
  34.          ssl_cipher:   
  35.         x509_issuer:   
  36.        x509_subject:   
  37.       max_questions: 0  
  38.         max_updates: 0  
  39.     max_connections: 0  
  40. ax_user_connections: 0  
  41.              plugin: mysql_native_password  
  42. thentication_string:   
  43.    password_expired: N  

参数说明:

[sql] view plain copy
  1. Select_priv:用户可以通过SELECT命令选择数据。  
  2. Insert_priv:用户可以通过INSERT命令插入数据;  
  3. Update_priv:用户可以通过UPDATE命令修改现有数据;  
  4. Delete_priv:用户可以通过DELETE命令删除现有数据;  
  5. Create_priv:用户可以创建新的数据库和表;  
  6. Drop_priv:用户可以删除现有数据库和表;  
  7. Reload_priv:用户可以执行刷新和重新加载MySQL所用各种内部缓存的特定命令,包括日志、权限、主机、查询和表;重新加载权限表;  
  8. Shutdown_priv:用户可以关闭MySQL服务器;在将此权限提供给root账户之外的任何用户时,都应当非常谨慎;  
  9. Process_priv:用户可以通过SHOW PROCESSLIST命令查看其他用户的进程;服务器管理;  
  10. File_priv:用户可以执行SELECT INTO OUTFILE和LOAD DATA INFILE命令;加载服务器上的文件;  
  11. Grant_priv:用户可以将已经授予给该用户自己的权限再授予其他用户(任何用户赋予全部已有权限);  
  12. References_priv;目前只是某些未来功能的占位符;现在没有作用;  
  13. Index_priv:用户可以创建和删除表索引;用索引查询表;  
  14. Alter_priv:用户可以重命名和修改表结构;  
  15. Show_db_priv:用户可以查看服务器上所有数据库的名字,包括用户拥有足够访问权限的数据库;可以考虑对所有用户禁用这个权限,除非有特别不可抗拒的原因;  
  16. Super_priv:用户可以执行某些强大的管理功能,例如通过KILL命令删除用户进程,使用SET GLOBAL修改全局MySQL变量,执行关于复制和日志的各种命令;超级权限;  
  17. Create_tmp_table_priv:用户可以创建临时表;  
  18. Lock_tables_priv:用户可以使用LOCK TABLES命令阻止对表的访问/修改;  
  19. Execute_priv:用户可以执行存储过程;此权限只在MySQL 5.0及更高版本中有意义;  
  20. Repl_slave_priv:用户可以读取用于维护复制数据库环境的二进制日志文件;此用户位于主系统中,有利于主机和客户机之间的通信;主服务器管理;  
  21. Repl_client_priv:用户可以确定复制从服务器和主服务器的位置;从服务器管理;  
  22. Create_view_priv:用户可以创建视图;此权限只在MySQL 5.0及更高版本中有意义;  
  23. Show_view_priv:用户可以查看视图或了解视图如何执行;此权限只在MySQL 5.0及更高版本中有意义;  
  24. Create_routine_priv:用户可以更改或放弃存储过程和函数;此权限是在MySQL 5.0中引入的;  
  25. Alter_routine_priv:用户可以修改或删除存储函数及函数;此权限是在MySQL 5.0中引入的;  
  26. Create_user_priv:用户可以执行CREATE USER命令,这个命令用于创建新的MySQL账户;  
  27. Event_priv:用户能否创建、修改和删除事件;这个权限是MySQL 5.1.6新增的;  
  28. Trigger_priv:用户能否创建和删除触发器,这个权限是MySQL 5.1.6新增的;  
  29. Create_tablespace_priv:创建表空间  
  30. ssl_type:支持ssl标准加密安全字段  
  31. ssl_cipher:支持ssl标准加密安全字段  
  32. x509_issuer:支持x509标准字段  
  33. x509_subject:支持x509标准字段  
  34. max_questions:0 每小时允许执行多少次查询  
  35. max_updates:0 每小时可以执行多少次更新  :0表示无限制  
  36. max_connections:0 每小时可以建立的多少次连接:0表示无限制  
  37. max_user_connections:0 单用户可以同时具有的连接数:0表示无限制  
  38. plugin:5.5.7开始,mysql引入plugins以进行用户连接时的密码验证,plugin创建外部/代理用户   
  39. authentication_string:通过authentication_string可以控制两者的映射关系,(PAM plugin等,PAM可以支持多个服务名)尤其是在使用代理用户时,并须声明这一点  
  40. password_expired:密码过期 Y,说明该用户密码已过期 N相反  


用户管理
mysql>use mysql;
查看
mysql> select host,user,password from user ;
创建
mysql> create user  zx_root   IDENTIFIED by 'xxxxx';   //identified by 会将纯文本密码加密作为散列值存储
修改
mysql>rename   user  feng  to   newuser;//mysql 5之后可以使用,之前需要使用update 更新user表
删除
mysql>drop user newuser;   //mysql5之前删除用户时必须先使用revoke 删除用户权限,然后删除用户,mysql5之后drop 命令可以删除用户的同时删除用户的相关权限
更改密码
mysql> set password for zx_root =password('xxxxxx');
 mysql> update  mysql.user  set  password=password('xxxx')  where user='otheruser'
查看用户权限
mysql> show grants for zx_root;
赋予权限
mysql> grant select on dmc_db.*  to zx_root;
回收权限
mysql> revoke  select on dmc_db.*  from  zx_root;  //如果权限不存在会报错
 
上面的命令也可使用多个权限同时赋予和回收,权限之间使用逗号分隔
mysql> grant select,update,delete  ,insert  on dmc_db.*  to  zx_root;
如果想立即看到结果使用
flush  privileges ;
命令更新 
 
设置权限时必须给出一下信息
1,要授予的权限
2,被授予访问权限的数据库或表
3,用户名
grant和revoke可以在几个层次上控制访问权限
1,整个服务器,使用 grant ALL  和revoke  ALL
2,整个数据库,使用on  database.*
3,特点表,使用on  database.table
4,特定的列
5,特定的存储过程
 
user表中host列的值的意义
%              匹配所有主机
localhost    localhost不会被解析成IP地址,直接通过UNIXsocket连接
127.0.0.1      会通过TCP/IP协议连接,并且只能在本机访问;
::1                 ::1就是兼容支持ipv6的,表示同ipv4的127.0.0.1
 
 

grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。

grant select on testdb.* to common_user@’%’

grant insert on testdb.* to common_user@’%’

grant update on testdb.* to common_user@’%’

grant delete on testdb.* to common_user@’%’

或者,用一条 MySQL 命令来替代:

grant select, insert, update, delete on testdb.* to common_user@’%’

9>.grant 数据库开发人员,创建表、索引、视图、存储过程、函数。。。等权限。

grant 创建、修改、删除 MySQL 数据表结构权限。

grant create on testdb.* to developer@’192.168.0.%’;

grant alter on testdb.* to developer@’192.168.0.%’;

grant drop on testdb.* to developer@’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 developer@’192.168.0.%’;

grant show view on testdb.* to developer@’192.168.0.%’;

grant 操作 MySQL 存储过程、函数 权限。

grant create routine on testdb.* to developer@’192.168.0.%’; -- now, can show procedure status

grant alter routine on testdb.* to developer@’192.168.0.%’; -- now, you can drop a procedure

grant execute on testdb.* to developer@’192.168.0.%’;

10>.grant 普通 DBA 管理某个 MySQL 数据库的权限。

grant all privileges on testdb to dba@’localhost’

其中,关键字 “privileges” 可以省略。

11>.grant 高级 DBA 管理 MySQL 中所有数据库的权限。

grant all on *.* to dba@’localhost’

12>.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’

注意:修改完权限以后 一定要刷新服务,或者重启服务,刷新服务用:FLUSH PRIVILEGES。
 
 
权限表
权限说明all alter alter routine使用alter procedure 和drop procedurecreate create routine使用create  procedure
create temporary tables使用create temporary tablecreate  user create view delete drop execute使用call和存储过程
file使用select into outfile  和load data infilegrant option可以使用grant和revokeindex可以使用create index 和drop indexinsert lock tables锁表process使用show full processlist
reload   使用flushreplication client服务器位置访问replocation slave由复制从属使用select show databases show view 
shutdown使用mysqladmin shutdown 来关闭mysqlsuper update usage无访问权限    
 
 
 
 

原创粉丝点击